为什么C#不允许全局推断类型,即使用var?

时间:2010-04-08 08:58:36

标签: c# c#-3.0 inferred-type

我知道无法完成,因为只能对局部变量使用var。我只是想知道是否有人有理论为什么C#团队认为这应该如此。例如会有什么问题:

public class SomeClass
{
    var someString = "hello"; //not cool
    public SomeClass()
    {
        var someOtherString = "hello"; //cool
    }
}

如果初始化someString,那么它显然就像someOtherString一样的字符串。为什么局部变量有一个规则而全局变量有另一个规则?

2 个答案:

答案 0 :(得分:4)

重复,因此CW。

请参阅posting by Eric Lippert

  

让我简单地过分简化C#编译器的工作原理。首先,我们遍历每个源文件并执行“仅限顶级”解析。也就是说,我们在所有嵌套级别标识每个命名空间,类,结构,枚举,接口和委托类型声明。我们解析所有字段声明,方法声明等。事实上,我们解析除方法体之外的所有事物;那些,我们稍后跳过并回到他们身边   [...]
   如果我们有“var”字段,则在分析表达式之前无法确定字段的类型,并且在我们已经需要知道字段的类型之后发生这种情况。

答案 1 :(得分:1)

它与编译器必须解决的搜索量有关。