0

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

c# 允许这样做:

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

但它不允许这样做:

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

    public void Foo()
    {
        // ...
    }
}

是否有一个原因?谢谢。

4

1 回答 1

4

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

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

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

于 2012-09-18T18:24:58.560 回答