GET*_*Tah 0 c# var implicit-conversion
可能重复:
在C#中使用var关键字
对于C#来说比较新,我想知道MS必须引入var隐式类型变量的动机.文件说:
隐式类型的局部变量是强类型的,就像您自己声明了类型一样,但编译器确定了类型.
进一步说:
在许多情况下,var的使用是可选的,只是语法上的便利
这一切都很好,但在我看来,这只会引起混乱.
假设你正在审查这个for循环.
foreach (var item in custQuery){
// A bench of code...
}
Run Code Online (Sandbox Code Playgroud)
而不是审查循环的内容和语义,我会花费宝贵的时间来寻找项目的类型!我宁愿选择以下内容:
foreach (String item in custQuery){
// A bench of code...
}
Run Code Online (Sandbox Code Playgroud)
问题是:我读到隐式类型变量在处理LINQ时有帮助,是否真的有助于在其他场景中使用它?
将var需要的关键字LINQ被引入时,这样的语言可以为匿名类型创建一个强类型的变量.
例:
var x = new { Y = 42 };
Run Code Online (Sandbox Code Playgroud)
Now x是一个具有特定类型的强类型变量,但该类型没有名称.编译器知道什么x.Y意思,所以你不必使用反射来获取对象中的数据,就像你做的那样:
object x = new { Y = 42 };
Run Code Online (Sandbox Code Playgroud)
现在x是类型object,所以你不能使用x.Y.
与LINQ一起使用时,它可以是这样的:
var x = from item in source select new { X = item.X, Y = item.Y };
Run Code Online (Sandbox Code Playgroud)
该x变量现在是一个IEnumerable<T>地方T是不具有名称的特定类型.
自从var引入了关键字以来,它还被用于使代码更具可读性,并被误用以保存击键.
它使代码更具可读性的一个例子是:
var list =
new System.Collections.Generic.List<System.Windows.Forms.Message.Msg>();
Run Code Online (Sandbox Code Playgroud)
代替:
System.Collections.Generic.List<System.Windows.Forms.Message.Msg> list =
new System.Collections.Generic.List<System.Windows.Forms.Message.Msg>();
Run Code Online (Sandbox Code Playgroud)
这是var关键字的一个很好的用法,因为语句中已存在该类型.关键字可能被滥用的情况如下:
var result = SomeMethod();
Run Code Online (Sandbox Code Playgroud)
由于SomeMethod名称没有给出它返回什么类型的任何指示,因此变量的类型并不明显.在这种情况下,您应该写出类型而不是使用var关键字.