4

我们正在将我们的项目从 C# 2.0 / VS2005 升级到 C# 3.0 / VS2008。作为升级的一部分,我们在编码标准文档中添加了一些项目。

从 C# 2.0 / VS2005 升级到 C# 3.0 / VS2008 时,您将如何(或是否)更改您的编码标准文档?

4

5 回答 5

7

您可以/应该就以下方面提供建议:

  • 何时使用查询表达式与点表示法
  • 对使用 lambda 表达式的任何限制(例如“不要修改捕获的变量)。(这当然也适用于 C# 2 中的匿名方法。)
  • 何时编写扩展方法
  • 何时使用隐式类型变量 ( var)

其中最后两个引起了一些争议,尤其是var.

如果您的约定提供了任何设计指南,我建议您还建议程序员考虑在以前可能使用继承或接口的地方使用委托进行专业化。一个很好的例子是排序——使用投影来指定排序顺序比编写IComparer<T>.

于 2008-12-04T09:32:24.577 回答
2

升级恰逢一个新项目,所以当我们搬家时,我们开始使用 StyleCop 和 FxCop 等工具,这些工具改变了我们的编码标准。它也很方便地执行它们:o)

于 2008-12-04T09:05:13.023 回答
1

升级本身不会发生任何变化,尽管您可能需要查看围绕新功能的编码标准,例如 LINQ 表达式、布局、Lambda 与查询语法。

于 2008-12-04T09:24:55.527 回答
1

我个人的烦恼是var“可能”的使用。

“可能”目前被定义为以下情况之一,主要是按照整洁度递减的顺序:

很明显,帮助 DRY:

var obj1 = new Something();
var obj2 = (Something)ObscureFunction();
var obj3 = ObscureStuff() as Something;

谨慎,我不在乎,只要它编译:

var obj4 = ObscureFunction();
foreach(Something s in obj4) { ... }

复杂泛型和几乎所有 LINQ 结果:

var obj5 = ctx.GetQuery<Something>()..ToList(..)..GroupJoin(..)...ToLookup(...);
于 2008-12-04T17:42:46.927 回答
0

我对 2008 年新功能的标准:

  • 仅对匿名类型谨慎使用 var。
  • 鼓励在委托上使用 lambda 表达式。
  • 仅当您无法控制源代码时才使用扩展方法
于 2008-12-04T17:20:04.693 回答