【发布时间】:2011-05-16 15:51:26
【问题描述】:
我有一个同事反对 C# 中的类型推断。我相信他的大部分论点都围绕着缺乏可读性。我反对这一点的论点是,Visual Studio 的智能感知功能提供了一种查看类型的简单方法,并且从代码中读取它们并不像我们在记事本中编码时那样必要。
但是,我很好奇在 C# 中使用类型推断的优缺点。我来自 C++,我知道 C++0x 的“自动”有一个更客观的好处,因为你并不总是知道你得到的类型(尤其是在进行繁重的模板编程时)。一个例子是使用 auto 来存储 Boost.Bind 的值。
在 C# 中,类型推断与其说是一项“很好拥有”或糖衣功能,不如说是一项要求。我认为当您处理长类型时它会很有用,例如:
Lazy<List<MyNamespace.ISomeVeryLongInterfaceType>> myVar = obj.GetLazy();
应该是:
var myVar = obj.GetLazy();
在我看来,这要干净得多。但是,是否有任何客观的论据支持 OR 反对类型推断?使用它是否是一种良好的编程习惯,即使在可以说它没有提供任何好处的情况下(例如,使用 'var' 而不是 'int')?
对于了解我应该如何在日常编码中使用“var”有一些帮助会很棒。
【问题讨论】:
-
ReSharper 似乎告诉我要经常使用
var... -
好吧,如果你问我,明确命名类型应该是一个非常罕见的例外,即使这样,你也应该使用你可能负担得起的最通用类型。但话又说回来,我主要使用 Python(鸭子类型)进行编程,并且非常喜欢 Haskell(类型推断)和结构类型。
-
让我感到很有趣的是,每当出现这样的讨论时,示例中总是充斥着诸如
myVar和obj.GetLazy()之类的毫无价值的名字。当你很好地命名变量时,一切似乎都是个坏主意。
标签: c# c++ visual-studio intellisense type-inference