1

在我的理解中,C# 最初是一种静态语言,并在 .NET 框架中进行了一些增强,并开始支持该语言的动态特性。

我认为 C# 中的“var”关键字在运行时加载 DLL 时非常强大,而且我们不知道会出现哪些类型,这非常有帮助。

但是我认为如果变量在设计时被声明为 var,它会带来确定变量类型的开销。现在,re-sharper 负责通过提出一些好的建议使我们的代码更漂亮、更简洁,它向我提出了如下建议:

我的代码如下所示:

StatusResult result = new StatusResult();

Resharper 建议必须将其转换为

 var result = new StatusResult();

这是为什么?当我认为这不是一个好主意时,我为什么要购买 resharper 的建议?还是我错了?

4

2 回答 2

4

这主要是一个基于意见的问题,但有一个问题值得解决:区分类型推断和动态类型非常重要。

In dynamic i = 0;,i被声明为动态变量,其类型仅在运行时解析。这可能会导致开销。

Invar i = 0; i被声明为 int。关键字仅表示编译器将var在编译时推断变量类型。没有“设计时”类型推断开销,因为var i = 1;int i = 1编译为同一组指令。它与动态类型无关。

于 2014-03-28T00:11:01.780 回答
3

至于你的问题,

这是为什么?当我认为这不是一个好主意时,我为什么要购买 resharper 的建议?

以下是我的经验之谈。接受这个特殊建议的一些专业人士:

  • 它有助于重构,因为 StatusResult 只出现一次
  • 它缩短了行并删除了阅读代码的人很容易推断出的冗余声明
  • 打字少,编码时行写得更快

现在,如果代码行是:

var result = GetStatusResult();  // A method call

我个人不会使用 var 因为维护者现在需要深入了解 GetStatusResult() 来查看 var 是什么。

归根结底,这是一个个人决定,除非您必须遵循编码标准,在这种情况下,您应该游说更改标准或遵循它。

作为旁注,正如 Benesh 在下面提到的,var != dynamic。我认为这是 var 名声不好的地方。加上我上面提供的何时不使用它的示例中的过度使用。

于 2014-03-28T00:11:41.160 回答