为什么不能在C#中的if语句中声明变量?

时间:2015-06-05 18:56:01

标签: c# variable-declaration

以下内容在C / C ++中有效:

if (Foo *foo = MaybeGetFoo())
{
    //Do something with foo.
}
else
{
    //We didn't get foo.
}

我最终使用了这么多。这是一种很好的速记方式来访问某些内容并使用它做某事(或者处理返回nullptr的情况)。它还将foo的范围限制在if / else的正文范围内。

我只是猜测,但我想这是有效的,因为赋值运算符返回Foo *&,然后进行评估并与零进行比较。

但是,你不能在C#中做同样的事情;这失败是因为'Foo' is a 'type' but is used like a 'variable'

if ((Foo foo = MaybeGetFoo()) != null)
{
    //Do something.
}
else
{
    //We didn't get foo.
}

这与变量的声明有关 - 它甚至不能在C#中使用指针。

目前,解决方案是在上面的行上声明/分配foo,然后在if语句中分配/评估它(尽管这意味着foo将在外部范围)。

但是我想知道,编译器期望什么才能相信Foo被用作变量?规范中是否有任何内容表明无法做到这一点?

0 个答案:

没有答案