c#允许这样:
public class MyClass
{
public void Foo()
{
var q = new MyObject();
}
}
但它不允许这样:
public class MyClass
{
var q = new MyObject();
public void Foo()
{
// ...
}
}
这有什么理由吗?感谢。
答案 0 :(得分:4)
您只能对局部变量使用类型推断。
var keyword推断变量的类型“在方法范围内声明”。就语言而言,var
用于定义“隐式类型的局部变量声明”(C#语言规范8.5.1)。该语言仅对局部变量使用var
,而不是类型级变量。
至于为什么,这是C#设计者的意图。它不是意图来推断所有用法的类型,仅针对特定场景。 Eric Lippert described why this was done提供了许多可能导致扩展使用的潜在陷阱,包括可能公开暴露匿名类型,链接多个初始化器等等。