以下内容在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
被用作变量?规范中是否有任何内容表明无法做到这一点?