Advantage of var keyword in C# 3.0
复制品:
What to use var or object name type
我无法理解C 3.0中var关键字的需求,使用它的优势是什么。我看到这个问题,但不理解使用它的真正目的
当你使用匿名类型作为投影时
1 2 3 | var query = from person in employees where person.Salary > 10000m select new { FullName=person.Name, person.Department }; |
这是
当你开始使用一个可能长的名称(通常是由于通用的原因)启动一个变量时,这也是一个实际的用处,并且只是呼叫一个制造商——它增加了信息密度(减少了重复)。There's the same amount of information in these two lines:
1 2 |
但第二种表达方式更紧凑。
Of course this can be abused,E.G.
1 | var nonObviousType = 999999999; |
但当这类变量显而易见时,我相信它会显著增加可行性。
其存在的主要原因是引进了匿名类型。你可以在没有名字的飞翔上构造人You can build types on the fly that doesn't have a name.你怎么知道他们的名字?答案是:你不能,你只是告诉编译员把他们给你:
ZZU1
这是一种很短的宣告变量的方式,虽然"It's a shorthand way of declaring a var.Although"Int I=New Int()Isn't too much to type
1 | SomeReallyLong.TypeName.WithNameSpaces.AndEverything myVar = new SomeReallyLong.TypeName.WithNameSpaces.AndEverything(); |
可能有人认为编译器已经知道了你所说的类型,感谢你使用的信息来初始化VAR,因此,要求编译器在这里做正确的事情不是太多。
这是一对优势
Shameless Self Promotion.我写了一个博客入口,这个主体令人厌恶的反馈,当我认为VAR的使用是适当的,并且包含了这个主体的相对信息。
- http://beta.blogs.msdn.com/jaredpar/archive/2008/09/09/when-to-use-type-inference.aspx
- Linq expressions don't return a predefined type,so you need a generic variable declaration keyword to capture that and other places where anonymous types are used.
- 使用谨慎的方法,可以很容易地从捕获的变量中解开一种方法的回归类型。
- 要把同一个名字放在同一条线上,以便同一个声明是真的一种丝绸。这是一种痛苦
页:1
1 | ReallyLongTypeName<SomeOtherLongTypeName> MyVariable = new ReallyLongTypeName<SomeOtherLongTypeName>(); |
The real need for the var keyword was to support anonymous types in C 355;3.0-which in turn were required to properly support linq(language integrated querying).
如果你不使用Var你就不可能做这样的事情
1 |
Which means you couldn't execute the following linquery because you wouldn't know how to assignation it to a variable:
1 | [var/sometype] dogsFixedQuery = from myDog in kennel select new {dogName = myDog.FirstName +"" + myDog.OwnerLastName, myDog.IsNeutered, dogLocation = kennel.Address}; |
如果你开始创建多层次复合链接,则匿名类型的效用会更明显。
事实上,你可以用其他方式避免打印出像EDOCX1这样的东西。这只是一个侧面效应/奖金,以防你是一个老鼠类型=)
如果你在不同地点开始呼唤变量,但如果你使用变量来确定一个强大的类型,而编译器可以确定你变量的类型,而不是任何读者应该能够确定它。
In short: