我真的很困惑var
. 我知道,这使代码更易于阅读,但是速度和内存呢?C#
var
一个。
var a = 100;
int b = 100;
int c; c = 100;
B.
var listA = new List<obj>();
List<obj>listB = new List<obj>();
List<obj>listC; listC = new List<obj>();
哪个更快?
有依赖类型吗?
在这两种情况下分配了多少内存以及何时分配了内存?
哪个更快?
两者都不是,它们是一样的。
有依赖类型吗?
我不确定你在这里问什么,但是这些代码片段一旦被编译就没有区别,所以我不会。
在这两种情况下分配了多少内存以及何时分配了内存?
对所有人来说都是一样的。例如int
,所有情况下都是 32 位。对于List
示例,所有三个都将分配一个单词作为引用,加上实际列表实例的内存。
它纯粹是编译步骤功能。编译器推断左侧表达式的类型,并将其用作变量类型。所以产生的 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
如果表达式类型和变量类型不同,则可能会有所不同。
什么时候使用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();
var 关键字只有在 C# 编译器生成程序集的 IL 代码时才起作用,要创建的变量类型由表达式右侧计算(必须指定且不能为空)。Var 不会影响运行时的任何内容。
var
是从右边语句返回的任何内容中推断出来的。这是由编译器完成的,所以当程序实际运行时,没有区别。
但是请注意,如果语句产生意外类型,您将不会收到编译器错误。