在与同事讨论了在C#3中使用'var'关键字后,我想知道人们对通过var的类型推断的适当用途有什么看法?
例如,我在可疑情况下懒得使用var,例如: -
foreach(var item in someList) { // ... } // Type of 'item' not clear.
var something = someObject.SomeProperty; // Type of 'something' not clear.
var something = someMethod(); // Type of 'something' not clear.
Run Code Online (Sandbox Code Playgroud)
var的更合理用途如下: -
var l = new List<string>(); // Obvious what l will be.
var s = new SomeClass(); // Obvious what s will be.
Run Code Online (Sandbox Code Playgroud)
有趣的是LINQ似乎有点灰色,例如: -
var results = from r in dataContext.SomeTable
select r; // Not *entirely clear* what results will be …Run Code Online (Sandbox Code Playgroud) 可能重复:
var关键字有什么意义?
我不是在问它是如何运作的.我不是在问它是否会影响性能.我已经知道那些答案了.
我想知道MS C#团队首先将它添加到语言中的原因.你不会在语言中加入无聊的东西.一定有一个值得注意的问题.这是什么问题?
我见过的"它解决的问题"最接近的例子是使用匿名类型时,如下所示:
var linqResult = from element in SomeCollection s
elect new { element.A, element.B }
Run Code Online (Sandbox Code Playgroud)
具有讽刺意味的是,样式和编码标准指南(例如Microsoft提供的)建议编码人员避免在结果类型不明显时使用'var'.换句话说,'var'的(推测)预期目的与编码标准指南相冲突.
如果我正在编写编码标准,并试图防止过度使用'var',我有点倾向于说"仅使用'var'来回应匿名类型." 但这带来了问题的全方位:将"var"添加到语言中的目的是什么?
可能的重复:
使用什么:var或对象名称类型?
在C#中使用var关键字var关键字
的重点是什么?
我是否应该总是喜欢在C#3.0中隐含类型的局部变量?
我刚刚安装了ReSharper的试用版,以便为我的公司进行评估.我注意到的一件事是建议我更改以下内容(编写示例):
string s = "";
Run Code Online (Sandbox Code Playgroud)
至
var s = "";
Run Code Online (Sandbox Code Playgroud)
在声明变量时,最好使用var关键字而不是使用Object Type吗?它给了什么优点.对于上下文,我是一名刚刚过渡到.Net工作的Java开发人员.
似乎越来越多我读过的C#代码使用var类型标识符:
foreach (var itemChange in ItemChanges)
{
//...
}
Run Code Online (Sandbox Code Playgroud)
而不是明确说明类型:
foreach (ItemChange itemChange in ItemChanges)
{
//...
}
Run Code Online (Sandbox Code Playgroud)
即使知道类型.
我仍在使用后一个显式版本,因为我认为稍后阅读它会更快地了解变量的类型,而不是使用var.
但是否有任何技术理由使用其中一种?
可能的重复:
var关键字的重点是什么?
在C#中使用var关键字
我理解IEnumerable<...>数据类型如何使代码的可读性降低或嵌套泛型看起来有点令人生畏.但除了代码可读性之外,使用var而不是显式类型是否有优势?看起来通过使用显式类型,您最好传达变量的功能,因为您知道它是什么.
如果它是工作场所编码标准,我会为了团队合作而使用它.然而,在我自己的项目中,我更愿意避免使用var.
在我正在阅读的一本书中,它指出隐式类型使得以下代码比不使用var关键字时更清晰:
var words = new[] { "a", "b", null, "d" };
foreach (var item in words)
{
Console.WriteLine(item);
}
Run Code Online (Sandbox Code Playgroud)
在我看来,情况正好相反:如果您使用了string,那么代码的读者会立即知道它是foreach循环中的字符串,而不必查找定义变量的代码.
隐式类型如何使上面的代码更清晰?
这本书是C#3.0 - Die Neuerungen.schnell + kompakt是德语,实际文本是:
Das Schluesselwort var kann auch beim Durchlaufen von foreach-Schleifen verwendet werden,um somit den Code uebersichtlicher und einfacher zu gestalten.Besonders bei komplexen Typen kann man auf diese Art und Weise Programmierfehler verhindern.
这是我的翻译:
在遍历foreach循环时也可以使用var关键字,从而使代码更容易和更简单地创建.特别是在使用复杂类型时,这可以防止编程错误.
好吧,现在更仔细地阅读它,他实际上声明var在foreach循环中使代码更容易创建但不一定更容易阅读.
我总是看到其他人生成如下代码:
var smtp = new SmtpClient();
但为什么要使用var而不是SmtpClient在这种情况下呢?我总是用
SmtpClient smtp = new SmtpClient();
是var更有效?为什么要使用var而不是实际的变量类型?我错过了什么吗?
可能重复:
var关键字有什么意义?
为什么c#需要类型推断类型变量的"var"标识符?
我的意思是把它关掉是什么问题:
a = 1;
//vs
var a = 1;
Run Code Online (Sandbox Code Playgroud)
在Scala中阅读编程:
"类型变量"语法不能简单地忽略类型 - 将不再有标记来启动定义.
但是把它留在a:Int或int a之间有什么不同呢?
可能重复:
在C#中使用var关键字var关键字
的重点是什么?
我在使用隐式打字而不是显式打字时有点困惑.
正如MSDN在C#编码标准中引用的那样:
当从变量的右侧明显变量的类型时,或者当精确类型不重要时,对局部变量使用隐式类型.
我的问题是,当我们已经知道底层变量类型时,为什么我们需要在这里使用隐式类型?
有什么好处?
请帮助澄清我的疑问.