在C#3.0> +中隐式输入有什么好处

时间:2009-07-27 23:09:36

标签: c# .net implicit-typing

我能看到的唯一优势:

var s = new ClassA();

ClassA s = new ClassA();

如果您之后决定要ClassB,那么您只需要更改声明的RHS。

我想如果你通过一个集合进行枚举,你也可以只是'var',然后再计算出类型。

是吗?还有一些其他巨大的好处,我的虚弱的头脑没有看到?

8 个答案:

答案 0 :(得分:8)

它主要是语法糖。这是你的偏好。除非使用匿名类型,否则需要使用var。尽管如此,我更喜欢隐式打字,它真的很流行于LINQ。

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

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

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

var Foo = new List<string>();

答案 1 :(得分: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,这不是我们想要的。

答案 2 :(得分:4)

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

The evilness of 'var' in C#?

使用var的一些很好的理由:

  • 简洁
  • 减少重复(DRY)
  • 减少重构工作
  • 支持匿名类型(将其添加到C#的关键原因)

答案 3 :(得分:2)

答案 4 :(得分:2)

它让我不再重复自己的不必要了。考虑一下:

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

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

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

此处dict的类型仍然存在疑问,但代码较短,我认为它也更容易阅读。

答案 5 :(得分:1)

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

喜欢:

var t = new {number = 10, name = "test"};

答案 6 :(得分:0)

隐式类型的首要原因是支持匿名类型,例如LINQ查询生成的类型。在处理复杂类型的泛型时,它们也是一个很大的好处......类似于Dictionary<int,List<string>>。这不是太复杂,但想象一下......

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

}
隐式输入简化了

答案 7 :(得分:0)

尽管var关键字主要是为了支持匿名类型而引入的,但我更广泛地使用它的主要论点是为了简洁/更易读的代码,再加上你的代码行更多:

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

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