为什么 C# 无法推断类成员的类型?

Est*_*ban 1 .net c# type-inference

可能的重复:
隐式键入;为什么只是局部变量?

c# 允许这样:

public class MyClass
{
    public void Foo()
    {
        var q = new MyObject();
    }
}
Run Code Online (Sandbox Code Playgroud)

但它不允许这样做:

public class MyClass
{
    var q = new MyObject();

    public void Foo()
    {
        // ...
    }
}
Run Code Online (Sandbox Code Playgroud)

是否有一个原因?谢谢。

Ree*_*sey 5

您只能对局部变量使用类型推断。

var关键字推断“在方法范围内声明的”变量的类型。就语言而言,var用于定义“隐式类型局部变量声明”(C# 语言规范 8.5.1)。该语言仅使用var局部变量,而不使用类型级变量。

至于为什么,这取决于 C# 设计者的意图。它并不是为了推断所有用途的类型,而只是为了特定场景。Eric Lippert描述了这样做的原因,并提供了扩展使用可能导致的许多潜在陷阱,包括可能公开暴露匿名类型、链接多个初始值设定项等。