我为什么要升级到c#4.0?

我知道C#4.0中有一些不错的新function,但在我的生活中,我不能想到升级现有项目或转换到新项目的令人信服的理由。

我看过一些post,人们说如果他们的托管服务没有提供.Net 4他们会找到另一个提供商.Net 4是他们的方向

现在我的老板试图让我同意将我们所有的生产环境切换到C#4并立即开始。

所以问题是有没有人开始使用,或者将项目转换为C#4,这是有说服力的原因? 有没有一个你必须拥有的function会让你的生活变得如此简单?

C#4.0中有一些很酷的新function :

  • 动态成员查找
  • 协变和逆变generics类型参数
  • 使用COM时可选的ref关键字
  • 可选参数和命名参数
  • 索引属性

在他的发布博客文章中,Scott Guthrie详细介绍了.NET 4的function 。 另一个很好的资源是http://www.asp.net/learn/whitepapers/aspnet4上的白皮书。 但是,我怀疑你是否会立即需要这些新function中的一个/任何一个。 正如Scott Hanselman在博客中所写 :

在.NET 4中有很多新的东西,但不是那种“压倒性的 – 我需要重新学习 – 所有东西”的方式。

因此,您是否应该升级取决于各种其他因素。 我想到的一些原因:

  • 通过VS2008在单一平台VS2010上标准化您的开发环境。
  • .NET Framework的大小大幅减少
  • 如果您是Office开发人员的Visual Studio工具,请加快速度

与您的经理进行公开对话似乎很适合理解他升级的理由。 我认为,因为它shiny不是一个令人信服的理由。

作为参考,这个过时的Stack Overflow问题“ 为什么不升级到最新的.net框架 ”提供了与您的问题相反的信息。

  • 坦率地说, System.Collections.Concurrent使开发multithreading应用程序变得轻而易举。

  • 新的和改进的System.Linq.Expressions使编写动态编译的代码看起来像孩子的游戏。

  • 新的命名参数function意味着我可以拥有大型构造函数,而不会对每个参数的含义感到困惑。 不可变对象更容易。

令人惊讶的是没有提到

  • PLINQ
  • 任务并行库

您的问题是特定于C#4.0还是.NET 4.0?

在C#4.0中,只有几个非常好的新function。 协方差/逆变不是一直有用,但是当你遇到它的需要时,它确实可以节省很多痛苦。 可选的方法参数可以减少许多丑陋的方法覆盖,并使某些方法调用更加清晰。 如果您使用的是COM或IronPython或任何类似的框架,那么dynamic关键字也可以成为真正的救命稻草。

.NET 4.0通常在各种框架中都有很多非常有趣的function。 例如,Linq to Entities的外键支持使我们的生活变得更加轻松。 很多人对POCO的支持感到非常兴奋。 他们还增加了对entity framework中先前缺少的一些LINQ方法(例如, Distinct )的支持。

所以它真的可以归结为你正在使用哪些框架以及你如何使用它们,以及你进行切换的成本是多少。

首先,对我有用的东西可能对你毫无意义。 话虽如此,如果预算允许,我会升级Visual Studio。 事实上,我个人认为,与一家公司保持最新状态的公司存在巨大的职业风险。 如果不访问最新工具,您将落后于您对该领域的了解。

至于转换所有项目只是为了转换它们对我来说似乎是愚蠢的。 抛开所有额外的工作分配(并将机器升级到.NET 4),你必须考虑到你出错的可能性。 (如果你像我一样,必须使用.NET 3.5从第三方程序中调用一些东西,使它们无法转换。)

我的第一个规则是,除非你正在研究它,否则什么都不会被转换。 但我会认真地考虑转换任何可以使用并行代码或COM互操作改进的东西。

我确实有一个被转换的引人注目的项目。 我有一个长期运行的Web方法被调用。 在现在存在的版本中,我从方法返回而不知道结果。 相反,我给了用户一个稍后检查的方法。 通过移动到并行的foreach循环,这可以更好地工作,我可以让用户知道是否有任何错误。

同一个项目也正在转换为使用RIA服务,这些服务大大改进并减少了我自己的代码量。

我升级的原因与其他人一样。

…所以我可以把它放在我的简历上:)

如果你今天要开始一个新项目,那么最好在4.0开始它,因为在未来的某个时候你将不得不迁移它(假设它保持足够长的时间,.net的旧版本将停止存在支持的)。

C#4意味着其他的东西..取决于你的项目… WCF 4,WPF 4,ASP.NET 4,MVC 2,entity framework2等。所以不要只看C#作为改变的原因,你还要看整个堆栈。 如果仍然没有任何令人信服的东西,那么留在你所处的位置可能是明智的选择。

如果您正在使用WPF / Silverlight,我肯定会建议升级到Visual Studio 2010(我知道,您可以在没有IDE的情况下编写.NET 4.0代码,但这是一个边缘情况,如果有的话)。

多显示器支持很漂亮,但很多。 我花了很多时间试图让窗户刷新。

在语言方面,COM interop(如提到的@Gvs)也通过动态数据类型和可选参数得到了极大的改进。

更新: VS 2010 SP1具有多种显示器支持。

如果你可以让你的老板为10,000美元以上的Visual Studio Ultimate Edition而流行,那么IntelliTrace是一个令人信服的理由,可以升级您的环境并为其提供足够的投资理由。

使用dynamic数据类型和optional参数,COM集成更容易。

对我来说有两件事:

  1. 可选参数 – 因为我厌倦了使用相同方法的X版本污染类(重载)
  2. 动态关键字 – 因为C#中generics的表现力是一个笑话,这样我至少可以“无条件地写出我的意思”,当然还有执行速度惩罚

代码越紧凑(即如果你表达的想法没有添加“哦,如何避免语言的限制Y”),那就更好了,因为代码更容易维护而且更难做出愚蠢(或更糟)错误。

切换没有令人信服的稳定性或安全性原因。 这不应该是你老板的关注吗?