var关键字消除了显式类型声明的需要,我很感兴趣地阅读了SO discussion,它可能是合适的。
我还读到过(但没有用过) Boo,它似乎更进一步,把它变成了optional to declare a local variable。使用Boo,类型和声明都可以隐含。
这让我想知道,为什么C#语言的设计者要费心去包含一个var关键字呢?
更新:是的,var支持匿名类型,但是匿名类型本身并不需要使用var关键字...
var anon = new { Name = "Terry", Age = 34 };
对比
anon = new { Name = "Terry", Age = 34 };
发布于 2008-10-16 16:12:17
更新:实际上这里有两个相关的问题: 1.为什么我必须声明变量? 2.在一种让你声明变量的语言中,"var“有什么用处?
(1)的答案很多,可以在其他地方找到这个问题的答案。我对(2)的答案如下:
正如其他评论者所说,LINQ将此用于其匿名类型。然而,LINQ实际上是一个更一般问题的实例,在这个问题中,表达式右侧的类型对于程序员来说要么是未知的,要么是极其冗长的。考虑一下:
SomeGeneric<VeryLongTypename<NestedTypename>> thing = new
SomeGeneric<VeryLongTypename<NestedTypename>>();
冗长且容易出错,对吧?所以现在他们允许你这样做:
var thing = new SomeGeneric<VeryLongTypename<NestedTypename>>();
通过减少信息的重复,消除了错误。注意,这里不仅仅是输入错误:左侧表达式的类型有可能被错误地键入,以至于编译器可以从左到右进行静默转换,但转换实际上丢失了rvalue的某些属性。当rvalue返回的类型可能是未知的或匿名的时,这一点更加重要。
发布于 2008-10-16 16:04:36
如果没有var关键字,就有可能意外地创建了一个新变量,而实际上您本打算使用一个已经存在的变量。例如:
name = "fred";
...
Name = "barney"; // whoops! we meant to reuse name
发布于 2009-04-29 22:27:09
我理解使用var的必要性,它为它提供了很好的服务。没有关键字,只是在没有类型的情况下动态定义变量,这是可怕的。你伤害了下一个不得不维护你的代码的人,或者你自己,如果你需要重写你一年多没有接触过的代码。我不确定这是不是应该在C#中打开的一扇门,我希望它不会,因为在不必要的情况下过度使用var已经导致了可读性问题。
我最近看到的几乎每个.net 3.5示例都使用var定义了所有变量。
我的论点是,当它被过度使用时,为了节省击键次数,它确实牺牲了可读性。例如:
// What myVar is, is obvious
SomeObject myVar = new SomeObject();
// What myVar is, is obvious here as well
var myVar = new SomeObject();
我看到的问题是,人们到处都在使用它。例如:
// WTF is var without really knowing what GetData() returns?
// Now the var shortcut is making me look somewhere else when this should
// just be readable!
var myVar = GetData();
// If the developer would have just done it explicitly it would actually
// be easily readable.
SomeObject myVar = GetData();
因此,下一个论点将是,只需更好地命名函数...
var weight = GetExactWeightOfTheBrownYakInKilograms();
仍然不知道会有什么东西回来。它是int、decimal、float、weight对象,还是什么?我还是要浪费时间去查...我需要使用intellisense拐杖来拯救我的懒惰编程。可以在函数名中包含返回类型。好主意,现在使用var除了让我的所有函数都有真正的长名称之外,什么也没有节省。
我认为人们只是过度使用var,这导致了懒惰的编程,这反过来又导致更难阅读代码。每次键入关键字var时,都应该有一个很好的理由来说明为什么要使用它,而不是显式地使用它。
https://stackoverflow.com/questions/209199
复制相似问题