【发布时间】:2012-02-24 02:08:23
【问题描述】:
好的,考虑下面的代码:
private const int THRESHHOLD = 2;
static void Main(string[] args)
{
string hello;
if (THRESHHOLD > 1) return;
Console.WriteLine(hello);
}
令人惊讶的是,这段代码不会引发“Use of unassigned local variable 'hello'”编译时错误。它只是给出一个警告“检测到无法访问的代码”。
即使代码无法访问,它仍然是编译时错误,我认为正确的做法是抛出编译时错误。如果我要执行以下操作:
private const int THRESHHOLD = 2;
static void Main(string[] args)
{
string hello;
if (THRESHHOLD > 1) return;
hello.LMFAO();
}
果然,我得到一个“'string'不包含'LMFAO'的定义,并且找不到接受'string'类型的第一个参数的扩展方法'LMFAO'(您是否缺少使用指令还是程序集引用?)”编译时错误。
为什么使用未赋值的变量不一样?
EDIT 更改了 const 变量,使其不那么分散注意力。我认为很多人都忽略了问题的重点,即根据哪种情况,编译时错误优先于无法访问的代码。
【问题讨论】:
-
只是想知道:您是否希望
TRUE评估为除true之外的任何内容? -
未使用的变量不会阻止您的代码工作或编译,这就是为什么它只是一条警告消息。尝试使用未定义的方法会阻止您的代码运行,因此会出现错误。我不确定我是否理解这个问题。
-
@BrianRasmussen 也许他来自一个“真”关键字全部大写的语言?
-
其他相关的有趣问题:stackoverflow.com/questions/636932/…
-
因为一个未知的方法(或变量)在语法上是无效的,在这种情况下,无法访问的代码唯一改变的是它认为所有未分配的变量都已分配,因为它们必须在它们被分配之前被分配 used,不能用在无法访问的代码中。
标签: c#