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',然后再计算出类型.
是吗?还有一些其他巨大的好处,我的虚弱的头脑没有看到?
它主要是语法糖.这是你的偏好.除非使用匿名类型,否则需要使用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)
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,这不是我们想要的.