C#中类型推断有哪些优缺点?

voi*_*ter 9 c# c++ intellisense type-inference visual-studio

我有一个同事反对C#中的类型推断.我相信他的大多数论点都包含缺乏可读性.我反对的论点是Visual Studio的intellisense功能提供了一种查看类型的简单方法,并且从代码中读取它们并不像我们编写记事本时那样必要.

但是,我很好奇在C#中使用类型推断的优点和缺点.我来自C++,我知道C++ 0x的'auto'有一个更客观的好处,因为你并不总是知道你得到的类型(特别是在进行繁重的模板编程时).一个例子是使用auto来存储Boost.Bind的值.

在C#中,类型推断似乎没有那么多,只要它是"很好的"或糖涂层功能.我认为当你处理长类型时会有用,例如:

Lazy<List<MyNamespace.ISomeVeryLongInterfaceType>> myVar = obj.GetLazy();
Run Code Online (Sandbox Code Playgroud)

这将是:

var myVar = obj.GetLazy();
Run Code Online (Sandbox Code Playgroud)

在我看来,这更清洁.但是,OR对类型推断有任何客观论据吗?使用它是否是良好的编程习惯,即使在可以说它没有提供任何好处的情况下(例如,使用'var'而不是'int')?

有些帮助理解我应该如何在我的日常编码中使用'var'会很棒.

Jac*_*ope 8

类型推断是出于您为C++提供的原因而发明的,您可以创建没有类型名称的匿名类型(特别参见Lambdas和Linq).

所以在这种情况下需要它.

在另一种情况下(当类型名称已知时),它归结为样式.var当类型非常明显时我使用:

// I like this - less duplication and easier to read
var item = new List<ComplexObjectItem>();
Run Code Online (Sandbox Code Playgroud)

代替:

List<ComplexObjectItem> item = new List<ComplexObjectItem>();
Run Code Online (Sandbox Code Playgroud)

因为它减少了重复.

但是,当读者不能立即明白这种类型时,我宁愿不使用它:

// I don't like this - I need to look up what the type is
var item = ResultOfSomeFunctionWhereICantSeeWhatItIs();
Run Code Online (Sandbox Code Playgroud)

但你的里程可能会有所不同