在C#中,关键字如何var工作?
在C#中,关键字如何var工作?
Answers:
这意味着要声明的本地类型将由编译器推断:
// This statement:
var foo = "bar";
// Is equivalent to this statement:
string foo = "bar";
值得注意的是,var并未将变量定义为动态类型。因此,这是不合法的:
var foo = "bar";
foo = 1; // Compiler error, the foo variable holds strings, not ints
var 只有两个用途:
var foo = new { Bar = "bar" };var除了本地语言,您不能将其用作任何其他类型。因此,您不能使用关键字var来声明字段/属性/参数/返回类型。
var foo = new Foo();是同样的事情Foo foo = new Foo();,这该装置foo可以包含一个Foo参考,或参考一个对象中的任何Foo 的子类型,不是一个Foo 超级类型。
这意味着数据类型是从上下文派生(暗示)的。
从http://msdn.microsoft.com/zh-cn/library/bb383973.aspx
从Visual C#3.0开始,在方法范围内声明的变量可以具有隐式类型var。隐式类型化的局部变量是强类型的,就像您自己声明了类型一样,但是编译器会确定类型。i的以下两个声明在功能上等效:
var i = 10; // implicitly typed
int i = 10; //explicitly typed
var 对于消除键盘打字和视觉噪音很有用,例如,
MyReallyReallyLongClassName x = new MyReallyReallyLongClassName();
变成
var x = new MyReallyReallyLongClassName();
但可能会过度使用,以至于牺牲了可读性。
它根据初始化中分配给它的内容声明一个类型。
一个简单的例子是代码:
var i = 53;
将检查53的类型,并将其基本上重写为:
int i = 53;
请注意,虽然我们可以拥有:
long i = 53;
var不会发生这种情况。虽然可以:
var i = 53l; // i is now a long
类似地:
var i = null; // not allowed as type can't be inferred.
var j = (string) null; // allowed as the expression (string) null has both type and value.
对于复杂的类型,这可能是次要的便利。对于匿名类型更重要:
var i = from x in SomeSource where x.Name.Length > 3 select new {x.ID, x.Name};
foreach(var j in i)
Console.WriteLine(j.ID.ToString() + ":" + j.Name);
这里没有其他定义i和j使用的方法,var因为它们所拥有的类型没有名称。
int i = 100;// explicitly typed
var j = 100; // implicitly typed
var是C#中的“上下文关键字”,这意味着您只能在与使用变量的同一类的上下文中隐式地将其用作局部变量。如果尝试在从“ Main”或其他外部类或某个接口调用的类中使用它,则将收到错误CS0825 < https://docs.microsoft.com/zh-cn/dotnet/ csharp / misc / cs0825 >
请参阅以下文档中有关何时可以使用和不可以使用它的说明:< https://docs.microsoft.com/zh-cn/dotnet/csharp/programming-guide/classes-and-structs/implicitly-typed -local-variables#备注 >
基本上,仅当声明带有隐式值的变量时才应使用此变量,例如“ var myValue =“ This is the value”;例如,与说“ string”相比,这节省了一些时间,但是恕我直言,这不是很多时间保存并限制了项目的可伸缩性。
var foo = new Foo(),foo可能是类型Foo或任何其超类。这怎么可能是合法的?