C#中“var”的含义是什么?

时间:2010-11-29 19:54:15

标签: c#

  

可能重复:
  Use of var keyword in C#

在C#中,关键字var如何运作?

7 个答案:

答案 0 :(得分:154)

这意味着声明的本地类型将由编译器推断:

// 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只有两种用途:

  1. 声明变量需要较少的输入,特别是在将变量声明为嵌套泛型类型时。
  2. 在存储对匿名类型对象的引用时必须使用它,因为事先无法知道类型名称:var foo = new { Bar = "bar" };
  3. 您不能将var用作除本地人之外的任何类型。因此,您无法使用关键字var来声明字段/属性/参数/返回类型。

答案 1 :(得分:14)

这意味着数据类型是从上下文派生(隐含)的。

来自http://msdn.microsoft.com/en-us/library/bb383973.aspx

  

从Visual C#3.0开始,变量   在方法范围声明的可以   有一个隐式类型var。一个   隐式键入的局部变量是   强烈打字,就像你有   自己宣布了类型,但是   编译器确定类型。该   以下是我的两个声明   在功能上等同于:

var i = 10; // implicitly typed
int i = 10; //explicitly typed

var对于消除键盘输入和视觉噪音非常有用,例如,

MyReallyReallyLongClassName x = new MyReallyReallyLongClassName();

变为

var x = new MyReallyReallyLongClassName();

但可能会被滥用到牺牲可读性的程度。

答案 2 :(得分:7)

“var”表示编译器将根据用法确定变量的显式类型。例如,

var myVar = new Connection();

会给你一个Connection类型的变量。

答案 3 :(得分:6)

它根据初始化中分配给它的内容声明一个类型。

一个简单的例子就是代码:

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之外,没有其他方法可以定义jvar,因为它们所拥有的类型没有名称。

答案 4 :(得分:5)

您是否曾经讨厌编写此类变量初始值设定项?

XmlSerializer xmlSerializer = new XmlSerialzer(typeof(int))

因此,从C#3.0开始,您可以用

替换它
var xmlSerializer = new XmlSerialzer(typeof(int))

一个通知:在编译期间解析了类型,因此没有性能问题。但是编译器应该能够在构建步骤中检测类型,因此像var xmlSerializer;这样的代码根本不会编译。

答案 5 :(得分:0)

  • 顾名思义,var是变量,没有任何数据类型。
  • 如果您不知道任何方法将返回哪种类型的数据,则这种情况适合使用var。
  • var是隐式类型,这意味着系统将定义数据类型本身。编译器将根据“ =”运算符右侧的值来推断其类型。
  • int / string等是您明确定义的显式类型。
  • Var只能在方法中定义为局部变量
  • 不能在单个语句中声明和初始化多个var。例如,var i = 1,j = 2;无效。
int i = 100;// explicitly typed 
var j = 100; // implicitly typed

答案 6 :(得分:0)

var是C#中的“上下文关键字”,意味着您只能在与使用变量的同一类的上下文中隐式地将其用作局部变量。如果尝试在从“ Main”或其他外部类或某个接口调用的类中使用它,则会出现错误CS0825 <{https://docs.microsoft.com/en-us/dotnet/csharp/misc/cs0825>

在此处的文档中查看有关何时可以使用和不可以使用它的说明:<{https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/classes-and-structs/implicitly-typed-local-variables#remarks>

基本上,仅当声明带有隐式值的变量时才应使用此变量,例如“ var myValue =“ This is the value”;例如,与说“ string”相比,这节省了一些时间,但是恕我直言节省了大量时间,并限制了项目的可伸缩性。