我在 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 风格的代码,但已完成的事情就完成了。

  • 保持保守,除非需要,否则不要做某事。
  • 75% 在 C#2.0 中、25% 在 C#3.0 中的应用程序并不是一个很好维护的野兽。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 与 C#2.0
现在,C#3.0 值得迁移吗?我想说,随着扩展方法和 Lambda 表达式的存在,答案是肯定的。仅这两个功能就可以使代码更容易阅读并更快地编写。将其添加到自动实现的属性、LINQ 和分部方法中,C#3.0 表明自己是一个有利的举措。

然而,迁移现有项目并不一定有好处。在决定迁移现有工作之前,您必须权衡利弊,尤其是在引入新错误和不稳定方面。对于新项目,我建议从 C#3.0 开始。

在这个阶段你有什么想要的C#3.5功能吗? :)

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

我认为很多这将取决于你的个人风格。恕我直言,C#3.5的最佳功能真正归结为以下

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

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

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

在我看来,没有理由不改用3.5。

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

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

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

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

3.5框架的另一个方便特征是“Collection Initializers”。看看这个:

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

干净,呵呵?

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

您可以使用任何事件来定位2.0运行时的代码!

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

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

可以安全地猜测.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中获得的新功能。这种类型的进展将是回答您问题的完美方式。这本书读得很好,所以我发现我很快就能完成它。

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

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

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

我确实使用了 ReSharper ,这使得使用新的3.5功能变得轻而易举作为ReSharper的重构建议。使用这样的工具可以使这种转变变得更加容易。

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

我会...没有任何伤害,你可以从新功能中获得一些好处

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

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

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

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top