为什么C#需要积分类型已经有“Var”关键字?

时间:2011-07-15 09:25:02

标签: c# variables types reference var

这可能是个愚蠢的问题,但我真的不知道原因。

    // 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#需要整数类型,例如intstringint[]List<>?如果我们只能使用var个关键字,那为什么会有整数类型?

另一种方式,

这些之间有什么区别?

var s = "Hello";
string s = "Hello";

4 个答案:

答案 0 :(得分:12)

没有特别的顺序...

  • var只是一个编译器构造;偶数var i = 4;的输入为int
  • C#并不总是var,如果不完全违反现有代码,就无法移除关键字。
  • 您只能在 方法变量 中使用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