为什么类字段不能是var?

arm*_*men 24 c#

class A
{
    A()
    {
        var x = 5;   // this is allowed
    }

    var _x = 5;   // the compiler is unhappy
}
Run Code Online (Sandbox Code Playgroud)

我想编译器必须能够推导出成员变量的类型,就像它对本地变量一样.那有什么区别?

the*_*oop 25

Eric Lippert在这里回答了你的问题:为什么没有字段变量?

基本上,对于一般情况,它需要重写C#编译器,因为它当前进行类型推断的方式不适用于var字段变量赋值的循环.


SLa*_*aks 7

var关键字是为匿名类型设计的,只能在方法内部使用.

而且,你错了; 编译器不能总是推导出一个var字段.

如果您编译以下内容会发生什么:

class A {
    public readonly var value = B.value;
}

class B {
    public readonly var value = B.value;
}
Run Code Online (Sandbox Code Playgroud)

这种情况不可能使用局部变量重新创建,因为变量在定义之前无法引用.

这里的一般问题是你要求编译器在它仍然生成该信息时使用类型信息.
Eric Lippert更深入地解释道.

  • 如果var特征仅针对匿名类型设计,则它们将禁止将其与常规变量一起使用.Eric Lippert本人说他希望这个功能适用于字段,但是它们存在imeplementation问题,而不是设计冲突. (8认同)