我能看到的唯一优势是:
var s = new ClassA();
超过
ClassA s = new ClassA();
是不是以后如果你决定你想要ClassB,你只需要改变声明的RHS。
我想如果您正在枚举一个集合,您也可以只使用“var”,然后再找出类型。
是这样吗??我虚弱的头脑看不到其他巨大的好处吗?
我能看到的唯一优势是:
var s = new ClassA();
超过
ClassA s = new ClassA();
是不是以后如果你决定你想要ClassB,你只需要改变声明的RHS。
我想如果您正在枚举一个集合,您也可以只使用“var”,然后再找出类型。
是这样吗??我虚弱的头脑看不到其他巨大的好处吗?
它主要是语法糖。这真的是你的偏好。除非使用匿名类型,否则需要使用 var。虽然我更喜欢隐式类型,但它确实在 LINQ 上大放异彩。
我发现两次输入一个类型是多余的。
List<string> Foo = new List<string>();
当我可以很容易地输入 var 时,很明显类型是什么。
var Foo = new List<string>();
var
对于没有名称供您使用的匿名类型很有用。
var point = new {X = 10, Y = 10};
这将创建一个具有属性 X 和 Y 的匿名类型。不过,它主要用于支持 LINQ。假设你有:
class Person
{
public String Name {get; set;}
public Int32 Age {get; set;}
public String Address {get; set;}
// Many other fields
}
List<Person> people; // Some list of people
现在假设我只想选择那些未满 18 岁的人的姓名和直到 18 岁的年龄:
var minors = from person in people where person.Age < 18 select new {Name = person.Name, YearsLeft = 18 - person.Age};
现在minors
包含List
一些匿名类型。我们可以迭代这些人:
foreach (var minor in minors)
{
Console.WriteLine("{0} is {1} years away from age 18!", minor.Name, minor.YearsLeft);
}
否则,这一切都不可能;我们需要选择整个 Person 对象,然后在我们的循环中计算 YearsLeft,这不是我们想要的。
当我第一次在这里登录时,我开始了一个极具争议的话题(我选择“邪恶”来描述 var 的一般使用显然是一个糟糕的选择。)不用说,我对 var 的欣赏比我做的更多在我开始该线程之前,以及更好地理解如何有效地使用它:
使用 var 的一些充分理由:
看看这个问题。也许他们会帮助你做出决定。
在 C# 中使用 var 关键字
https://stackoverflow.com/questions/633474/c-do-you-use-var
它让我不必重复自己。考虑一下:
Dictionary<string, List<int>> dict = new Dictionary<string, List<int>>();
我们有一个很长的类型名在同一行重复了两次,绝对没有任何好处。此外,如果您需要重构它,则需要更新类型两次。而这同样具有表现力:
var dict = new Dictionary<string, List<int>>();
这里的类型仍然毫无疑问dict
,但代码更短,我认为它也更容易阅读。
实际上C#中的“var”是用来处理匿名类型的。
像:
var t = new {number = 10, name = "test"};
隐式类型的首要原因是支持匿名类型,比如那些由 LINQ 查询产生的类型。在处理复杂类型的泛型时,它们也可以是一个很大的好处……比如Dictionary<int,List<string>>
. 这不是太复杂,但想象一下枚举......
foreach KeyValuePair<int,List<string>> pair in myDictionary
{
}
通过隐式类型简化。
虽然 var 关键字主要是为了支持匿名类型而引入的,但我看到更广泛地使用它的主要论点是为了简洁/更易读的代码,以及更适合您的代码行:
Dictionary<string, double> data = new Dictionary<string, double>();
versus
var data = new Dictionary<string, double>();
虽然对大多数人来说不是一个很好的理由,但作为盲人程序员,我也喜欢 var 关键字,因为我听的是读出的代码,因此这里只有一个音节之后的变量名 :-)