为什么必须在if语句的范围之外声明变量才能存在?

例如,以下代码无法编译:

DateTime? myDate;
if (myDate != null)
{
    DateTime runDate = DateTime.Now;
}
else
{
    DateTime runDate = DateTime.Now.AddDays(1);
}

string foo = runDate.toString();


我了解问题是我需要在if语句之前声明runDate,但是为什么呢?如果编译器确实允许这部分代码起作用,那么与之前声明的代码真的有什么不同吗?或许用更好的措辞来说明,为什么从事语言/框架工作的开发人员为什么决定采用这种方式?

最佳答案

好吧,请考虑一下,这是从您的示例得出的:

DateTime? myDate;
if (myDate != null)
{
    String runDate = DateTime.Now.ToString();
}
else
{
    DateTime runDate = DateTime.Now.AddDays(1);
}

string foo = runDate.ToString();


按照您的建议,runDate的类型(分配了foo时)在编译时是未知的,它可以是stringDateTime。静态类型的语言不允许这样做。

08-28 12:39
查看更多