为什么必须在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
时)在编译时是未知的,它可以是string
或DateTime
。静态类型的语言不允许这样做。