我对var
中的使用C#
关键字感到困惑。我知道,var
使代码更容易阅读,但速度和记忆呢?
一个。
var a = 100;
int b = 100;
int c; c = 100;
乙
var listA = new List<obj>();
List<obj>listB = new List<obj>();
List<obj>listC; listC = new List<obj>();
哪个更快?
是否依赖于类型?
在两种情况下以及何时分配内存时分配了多少内存?
答案 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)
答案 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
是从右边语句返回的内容推断的。这是由编译器完成的,所以当程序实际运行时,没有区别。
但请注意,如果语句产生非预期的类型,则不会出现编译器错误。