使用C#var关键字

时间:2013-04-25 14:58:00

标签: c# var

我对var中的使用C#关键字感到困惑。我知道,var使代码更容易阅读,但速度和记忆呢?

一个。

  1. var a = 100;
  2. int b = 100;
  3. int c; c = 100;
    1. var listA = new List<obj>();
    2. List<obj>listB = new List<obj>();
    3. List<obj>listC; listC = new List<obj>();
    4. 哪个更快?
      是否依赖于类型?
      在两种情况下以及何时分配内存时分配了多少内存?

6 个答案:

答案 0 :(得分:4)

  

哪个更快?

两者都不一样。

  

是否依赖于类型?

我不确定你在这里问的是什么,但是这些代码片段在编译之后没有区别,所以我会选择no。

  

在两种情况下以及分配内存时分配了多少内存?

对所有人来说都是一样的。对于int示例,对于所有情况,它是32位。对于List示例,所有三个都将为引用分配一个单词,以及实际列表实例的内存。

答案 1 :(得分:2)

这是纯粹的编译步骤功能。编译器推断左侧表达式的类型,并将其用作变量类型。因此产生的IL将是相同的。

所以:

var list1 = new List<int>();
List<int> list2 = new List<int>();

完全相同。但是我可以看到一些例子,其中指定类型可以有一些效果,例如:

var i1 = 5;
int i2 = 5;
//vs:
var i2 = 5;
object i2 = 5;

因此,如果实际表达式类型与声明的变量类型完全相同,那么它们完全相同。但如果表达式类型和变量类型不相同,var可能会有所不同。

答案 2 :(得分:1)

var关键字只是一种语法糖。

它不存在于IL中,所以没有区别。

重复主题:

Is there a performance hit in using the 'var' keyword in C#?

Will using 'var' affect performance?

答案 3 :(得分:1)

何时使用var以及何处不使用。 (因为这里已经回答了所有其他问题) 为什么var ?? - 匿名类型和LINQ

匿名(临时使用)类型:

var v = new { Amount = 108, Message = "Hello" };

一般:

使用:

var myList = new List<string>();

很明显,myList类型具有什么类型 - 代码阅读是好的

不要使用:

var properties = myPropertyHandler.GetProperties();

在这里你不知道GetProperties返回什么类型 - 代码读取不好。声明:

AppProperties properties =  myPropertyHandler.GetProperties();

答案 4 :(得分:0)

Var关键字仅适用于C#编译器生成程序集的IL代码,要创建的变量类型由表达式的右侧计算(必须指定且不能为null)。 Var不会影响运行时的任何内容。

答案 5 :(得分:0)

var是从右边语句返回的内容推断的。这是由编译器完成的,所以当程序实际运行时,没有区别。

但请注意,如果语句产生非预期的类型,则不会出现编译器错误。