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

Mat*_*att 6 .net c# implicit-typing

我能看到的唯一优势:

var s = new ClassA();
Run Code Online (Sandbox Code Playgroud)

过度

ClassA s = new ClassA();
Run Code Online (Sandbox Code Playgroud)

如果你决定要ClassB,那么你只需要更改声明的RHS即可.

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

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

Ste*_*itt 8

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

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

List<string> Foo = new List<string>();
Run Code Online (Sandbox Code Playgroud)

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

var Foo = new List<string>();
Run Code Online (Sandbox Code Playgroud)

  • 它不是纯糖.使用匿名类型时需要它. (3认同)

Nic*_*wis 5

var 对于没有名称供您使用的匿名类型很有用.

var point = new {X = 10, Y = 10};
Run Code Online (Sandbox Code Playgroud)

这将创建一个具有属性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
Run Code Online (Sandbox Code Playgroud)

现在假设我只想选择年龄在18岁以下的人的年龄18岁的名字和年份:

var minors = from person in people where person.Age < 18 select new {Name = person.Name, YearsLeft = 18 - person.Age};
Run Code Online (Sandbox Code Playgroud)

现在minors包含List一些匿名类型.我们可以通过以下方式迭代这些人:

foreach (var minor in minors)
{
    Console.WriteLine("{0} is {1} years away from age 18!", minor.Name, minor.YearsLeft);
}
Run Code Online (Sandbox Code Playgroud)

否则这一切都不可能; 我们需要选择整个Person对象,然后在循环中计算YearsLeft,这不是我们想要的.