为什么C#不能推断类成员的类型?

时间:2012-09-18 18:21:17

标签: c# .net type-inference

  

可能重复:
  Implicit typing; why just local variables?

c#允许这样:

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

但它不允许这样:

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

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

这有什么理由吗?感谢。

1 个答案:

答案 0 :(得分:4)

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

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

至于为什么,这是C#设计者的意图。它不是意图来推断所有用法的类型,仅针对特定场景。 Eric Lippert described why this was done提供了许多可能导致扩展使用的潜在陷阱,包括可能公开暴露匿名类型,链接多个初始化器等等。