这个项目的C#2.0到C#3.0过渡是否值得?

我已经在Stack Overflow上看过一些已经转换为C#2.0到C#3的人,但它真的值得吗?

在进入维护阶段之前,我有一个75%的项目。 我问自己是否值得切换到C#3.0?

更新:

该项目现在将具有Web界面,因此在进入维护阶段之前,我们必须开发Web部件(所有这些都是为了Windows内部目的而完成的)。 大多数部件将被重新使用(后端)。 大多数人都说过去不值得,因为它已经达到了75%……但现在你还认为它不值得吗?

最后做了什么

最后,由于我们将继续使用Web界面进行项目,因此新的一年将更新为3.5。 感谢大家的所有意见。

不,我不建议。 除非有特殊原因,否则我建议仅在新项目上开始3.5。 只需重新编译就不会从3.5获益,因为您的代码已经编写(或至少75%)。

如果您将来需要迁移到3.5,则可以轻松完成。 当然,您将拥有2.0样式的代码,但已完成的工作已完成。

  • 保守,除非你需要,否则不要做某事。
  • C#2.0中75%的应用程序和C#3.0中的25%的应用程序并不是一个很好的维护。 100%C#2.0应用程序肯定更易于维护。

当你要开始一个新项目,然后切换! 新的框架版本非常有趣,强烈建议使用此开关。

澄清
C#3.5不存在。 有C#1.0,​​C#2.0和C#3.0。

然后是.NET 1.0,.NET 1.1,.NET 2.0,.NET 3.0和.NET 3.5。

我们不应该混淆两者。

C#3.0 vs C#2.0
现在,C#3.0值得一提吗? 我会说,由于存在Extension方法和Lambda表达式,答案是肯定的。 仅这两个特性使得更容易阅读和更快地编写代码。 将其添加到自动实现的属性,LINQ和部分方法,C#3.0显示自己是一个有利的举措。

但是,移动现有项目并不一定有益。 在决定迁移现有工作之前,你必须权衡利弊,特别是在引入新的错误和不稳定方面。 对于新项目,我会说从C#3.0开始。

在这个阶段你有什么想要的C#3.5function吗? 🙂

如果它是LINQ,你可以尝试LINQBridge ..使用Studio的多目标和LINQBridge,你将能够使用C#3.0编译器的全部function编写本地(LINQ to Objects)查询 – 但你的程序将仅需要Framework 2.0。

我认为很多这将归结为你的个人风格。 恕我直言,C#3.5的最佳function真正归结为以下几点

  1. Lambda表达式
  2. LINQ
  3. 扩展方法

我的OO代码仍然看起来有点面向function。 因此,我认为3.5是一个巨大的好处,它绝对值得升级。

更好的是,可以使用3.5编译器来降低目标CLR 2.0。 这允许您使用新框架基于2.0安装(相对于3.0 / 3.5安装)进行部署。 如果您愿意在程序中添加适当的类型,则可以在此方案中完成上述所有操作。

在我看来,没有充分的理由不切换到3.5。

真正的杀手级function是,您可以在使用所有新语言function的同时继续定位旧版本的运行时(2.0+)。 所以你可以使用新的lambda表达式,扩展方法,匿名类型和所有其他好东西。 如果您的客户仍主要使用2.0框架,则可以继续定位早期运行时。

(如果必须使用早期的运行时版本,请不要使用3.5框架中的任何 。)

就个人而言,我认为如果您正在使用桌面GUI应用程序,最好的办法是使用3.0或3.5框架,因为WPF是我曾经使用过的最好的用户界面库(通过远景)。

另一方面,如果您已经在WinForms中编写了大部分GUI,那么您可能对3.5框架感兴趣,该框架允许(有限的)混合WinForms和WPF GUI元素。 你可以保留你已经完成的工作,但是在WPF控件的任何地方,无论哪里都可以添加一些不错的function。

3.5框架的另一个便利function是“Collection Initializers”。 看一下这个:

var myDictionary = new Dictionary { { "key-1", "value-1" }, { "key-2", "value-2" }, { "key-3", "value-3" }, }; 

整洁,对吧?

如果它更像JSON,我会更喜欢它。 但无论如何它的function非常方便。

任何你可以事件的目标是2.0运行时的代码!

如果您的项目接近完成,您可能无法从3.5的新function中受益。 对于新项目,当然值得一看。

这实际上取决于项目,它的目的是什么以及它的作用。

可以安全地猜测.NET Framework 2.0比3.5版本的计算机多得多。

另外,你有什么需要.NET 3.5在2.0中不可用(例如LINQ)? 如果你正在处理大量的查询和数据,我会切换。 但同样,取决于客户以及您是否打算在可预见的未来维护此应用程序。

从技术的角度来看,它是所有框架版本2,并且实现起来很少。 2.0,3.0和3.5的差异只是额外的库代码和一些编译器语法糖。

这不像你需要改变任何东西; 通过定位框架3.5,您有更多选择。

从你的团队的角度来看:是的,这是值得的。 没人想要在旧的代码库上工作。 当您处于开发的热潮中时,您可能会利用最新的稳定技术。

这真的取决于你需要做什么。 如果您的项目需要Lambda表达式,而您的查询对象具有清晰的语法,则应该查看3.0。

我目前正在阅读Jon Skeet撰写的C#In Depth ,他采用了在C#1.15中设置解决方案的方法,然后发展解决方案来描述您在2.0和3.0中获得的新function。 这种类型的进展将是回答您问题的完美方式。 这本书读得很好所以我发现我很快就能完成它。

你必须权衡成本与收益。 您没有提供有关您的项目的足够信息,以便我们在此为您提供建议,但请考虑:

  • 转换成本非常小。 C#3.0几乎完全向后兼容2.0并在框架2.0上运行
  • 如果编码几乎完成,效益也很小,但从长远来看可能会增长。 例如,使用Linq可能会更容易实现您将来可能必须实现的新function。

我已多次进行转换。 主要是因为lambda表达式的清晰语法使得代码更易于遵循(无论如何)。

我确实使用了ReSharper ,这使得使用新的3.5function变得轻而易举 ,因为ReSharper提供了很多重构建议。 使用这样的工具可以使这种转变变得更加容易。

3.5建立在2.0之上,所以你没有问题直接跳到3.5。

我会…没有任何伤害,你可以从新function中获益

我不明白你们所说的人都不这样做。 .NET 2.0是当前(CLR)运行时。 .NET 3.0和.NET 3.5都在2.0运行时运行。 迁移到.NET 3.5以获得C#3.0function实际上是更改项目属性中的单个下拉列表的问题。 (好的,如果使用LINQ等3.5等function,则将3.5运行时部署到目标机器上。如果安装3.5是一个问题,那么这不是一个简单的答案。)

除非你有充分的理由这样做,否则我不会改变任何东西; 即有一个你无法在2.0中解决的错误。

在项目的最后阶段升级框架可能会导致一些您目前不需要的问题。

如果你有一个项目的扩展,现在切换到最新版本的.NET可能是一件好事,否则我不会。