6

我能看到的唯一优势是:

var s = new ClassA();

超过

ClassA s = new ClassA();

是不是以后如果你决定你想要ClassB,你只需要改变声明的RHS。

我想如果您正在枚举一个集合,您也可以只使用“var”,然后再找出类型。

是这样吗??我虚弱的头脑看不到其他巨大的好处吗?

4

8 回答 8

8

它主要是语法糖。这真的是你的偏好。除非使用匿名类型,否则需要使用 var。虽然我更喜欢隐式类型,但它确实在 LINQ 上大放异彩。

我发现两次输入一个类型是多余的。

List<string> Foo = new List<string>();

当我可以很容易地输入 var 时,很明显类型是什么。

var Foo = new List<string>();
于 2009-07-27T23:12:39.117 回答
5

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,这不是我们想要的。

于 2009-07-27T23:18:30.803 回答
4

当我第一次在这里登录时,我开始了一个极具争议的话题(我选择“邪恶”来描述 var 的一般使用显然是一个糟糕的选择。)不用说,我对 var 的欣赏比我做的更多在我开始该线程之前,以及更好地理解如何有效地使用它:

C#中'var'的邪恶?

使用 var 的一些充分理由:

  • 简洁
  • 减少重复 (DRY)
  • 减少重构工作
  • 支持匿名类型(将其添加到 C# 的关键原因)
于 2009-07-27T23:12:50.973 回答
3

看看这个问题。也许他们会帮助你做出决定。

在 C# 中使用 var 关键字
https://stackoverflow.com/questions/633474/c-do-you-use-var

于 2009-07-27T23:14:27.630 回答
2

它让我不必重复自己。考虑一下:

Dictionary<string, List<int>> dict = new Dictionary<string, List<int>>();

我们有一个很长的类型名在同一行重复了两次,绝对没有任何好处。此外,如果您需要重构它,则需要更新类型两次。而这同样具有表现力:

var dict = new Dictionary<string, List<int>>();

这里的类型仍然毫无疑问dict,但代码更短,我认为它也更容易阅读。

于 2009-07-27T23:17:34.347 回答
1

实际上C#中的“var”是用来处理匿名类型的。

像:

var t = new {number = 10, name = "test"};
于 2013-06-20T14:27:33.080 回答
0

隐式类型的首要原因是支持匿名类型,比如那些由 LINQ 查询产生的类型。在处理复杂类型的泛型时,它们也可以是一个很大的好处……比如Dictionary<int,List<string>>. 这不是太复杂,但想象一下枚举......

foreach KeyValuePair<int,List<string>> pair in myDictionary
{

}

通过隐式类型简化。

于 2009-07-27T23:17:23.677 回答
0

虽然 var 关键字主要是为了支持匿名类型而引入的,但我看到更广泛地使用它的主要论点是为了简洁/更易读的代码,以及更适合您的代码行:

Dictionary<string, double> data = new Dictionary<string, double>();
versus
var data = new Dictionary<string, double>();

虽然对大多数人来说不是一个很好的理由,但作为盲人程序员,我也喜欢 var 关键字,因为我听的是读出的代码,因此这里只有一个音节之后的变量名 :-)

于 2009-07-27T23:28:02.890 回答