这可能是个愚蠢的问题,但我真的不知道原因。
// i is compiled as an int
var i = 5;
// s is compiled as a string
var s = "Hello";
// a is compiled as int[]
var a = new[] { 0, 1, 2 };
// expr is compiled as IEnumerable<Customer>
// or perhaps IQueryable<Customer>
var expr =
from c in customers
where c.City == "London"
select c;
// anon is compiled as an anonymous type
var anon = new { Name = "Terry", Age = 34 };
// list is compiled as List<int>
var list = new List<int>();
如果是,为什么C#
需要整数类型,例如int
,string
,int[]
,List<>
?如果我们只能使用var
个关键字,那为什么会有整数类型?
另一种方式,
这些之间有什么区别?
var s = "Hello";
string s = "Hello";
答案 0 :(得分:12)
没有特别的顺序...
var
只是一个编译器构造;偶数var i = 4;
的输入为int
var
,如果不完全违反现有代码,就无法移除关键字。int
代替var!特别是当类型很重要并且有 所有 的字节,浮点数,枚举,小数等与文字0
一起使用时;即short x = 0; int y = 0; long z = 0;
- 为什么只将 int
更改为var
?var
指定通用类型参数(<T>
)或typeof
var.TryParse
代替int.TryParse
答案 1 :(得分:6)
许多人认为写int i = 5
而不是var i = 5
是更好的做法。造成这种情况的原因有很多,但对我来说最引人注目的是我可以查看代码并立即知道i
类型,而不会拉伸我的大脑。这使我的大脑能够专注于更难的问题。
实际上引入了var
来声明其类型无法轻易命名的变量。它不是为了方便而引入的,尽管它可以这样使用。
答案 2 :(得分:4)
var
关键字只是语法糖,只能用于方法中的局部变量。它仍然是一个强类型变量。你可以在visual studio中将鼠标悬停在它上面以查看它是什么类型。
我们仍然需要类型,否则你会怎么做var list = new List<int>();
?您需要在某处键入List<int>
!
在许多情况下,最好是明确的,例如在处理可能是多种不同类型的文字时,或者提高可读性。
答案 3 :(得分:3)
var s = "Hello";"
和string s ="Hello";"
之间没有区别。但是,var foo = new Foo();
和IFoo foo = new Foo();
之间存在很大差异。在第一种情况下,所有Foo的成员都可以访问,在后者中确保只使用接口成员。这对于确保行为与接口兼容非常重要,而不仅仅是具体的实现。
此外,var
不能用于传递函数参数或声明成员变量。至于使用或不使用var
,我引用this question。