17

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

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

更新:

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

最后做了什么

最后,由于我们正在使用 Web 界面继续该项目,我们将在新的一年更新到 3.5。谢谢大家的所有意见。

4

16 回答 16

52

澄清
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 开始。

于 2008-10-04T16:38:40.993 回答
23

不,我建议不要。我建议仅在新项目上启动 3.5,除非另有特定原因。仅重新编译不会从 3.5 中获得任何好处,因为您的代码已经编写(或至少 75%)。

如果以后需要迁移到 3.5,可以轻松搞定。当然,您将拥有 2.0 风格的代码,但已经完成了。

  • 保守一点,除非你需要,否则不要做某事。
  • 一个应用程序在 C#2.0 中占 75%,在 C#3.0 中占 25%,这并不是一个好维护的野兽。100% 的 C#2.0 应用程序当然更易于维护。

当您要开始一个新项目时,请务必切换!新框架版本很有意思,强烈推荐switch。

于 2008-10-04T16:14:00.623 回答
12

在这个阶段是否有任何你非常想要的 C# 3.5 功能?:)

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

于 2008-10-04T16:13:22.310 回答
6

我认为这很大程度上取决于你的个人风格。恕我直言,C# 3.5 的最佳特性真正归结为以下几点

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

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

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

于 2008-10-04T16:14:52.180 回答
3

在我看来,没有充分的理由不切换到 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 运行时的任何事件定位该代码!

于 2008-10-04T21:07:42.043 回答
2

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

于 2008-10-04T16:14:18.580 回答
2

这实际上取决于项目、它的目标对象以及它的作用。

可以肯定地猜测 .NET Framework 2.0 在比 3.5 版更多的计算机上。

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

于 2008-10-04T16:15:50.870 回答
2

从技术的角度来看,这都是框架版本 2,而且实现起来非常简单。2.0、3.0 和 3.5 的区别只是额外的库代码和一些编译器语法糖。

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

从您的团队的角度来看:是的,这是值得的。没有人愿意在旧代码库上工作。当您处于开发的热潮中时,您不妨利用最新的稳定技术。

于 2008-10-08T23:13:47.793 回答
2

这真的取决于你需要做什么。如果您的项目需要 Lambda 表达式,您可以在其中使用清晰的语法查询对象,那么您应该查看 3.0。

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

于 2008-10-08T23:44:00.977 回答
2

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

  • 转换成本非常小。C# 3.0 几乎完全向后兼容 2.0 并在框架 2.0 上运行
  • 如果编码几乎完成,收益也很小,但从长远来看可能会增长。例如,您将来可能必须实现的新功能可能会使用 Linq 更容易实现。
于 2008-10-29T17:30:01.373 回答
2

我已经进行了多次转换。主要是因为 lambda 表达式的清晰语法使代码更容易理解(无论如何对我来说)。

我确实使用了ReSharper,这使得使用新的 3.5 功能变得轻而易举,因为 ReSharper 的重构建议中出现了很多。使用这样的工具使这种过渡变得更加容易。

于 2008-11-01T02:12:42.313 回答
1

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

于 2008-10-04T16:21:34.367 回答
1

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

于 2008-10-04T18:09:08.533 回答
1

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

于 2008-11-01T01:38:59.480 回答
0

除非您有充分的理由这样做,否则我不会更改任何内容;即有一个你不能在2.0 中解决的错误。

在项目的这么晚升级框架可能会导致一些您目前确实不需要的问题。

于 2008-10-29T17:23:00.733 回答
0

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

于 2008-11-21T13:07:40.620 回答