在if语句条件中声明并赋值变量,在语句体中重用

cca*_*oni 0 c#

我不能真正地说出问题的标题.无论如何,说我有一个声明如下:

if(myObject.SomeMethod() != null)
{
    DoSomethingWith(myObject.SomeMethod());
}
Run Code Online (Sandbox Code Playgroud)

我想避免双重打电话SomeMethod().理想情况下,模式匹配的东西如下:

if(myObject.SomeMethod() result != null)
{
    DoSomethingWith(result);
}
Run Code Online (Sandbox Code Playgroud)

语言中有什么可以帮助我吗?目前,我的选择是:

var result = myObject.SomeMethod();
if(result != null)
{
    DoSomethingWith(result);
}
Run Code Online (Sandbox Code Playgroud)

我知道上面的方法没有错,这是非常规范的.简单地说,最近语言中添加了很多语法糖,这使得我们可以大量压缩我们的代码:我问,因为我不知道是否有什么东西可以阻止if(myObject.SomeMethod() result != null)工作.

Tim*_*ter 6

好吧,我建议你使用第三个代码中的变量.然而...

如果您不想使用变量,可以使用模式匹配:

if(myObject.SomeMethod() is var result && result != null)
{
    DoSomethingWith(result);
}
Run Code Online (Sandbox Code Playgroud)

但请注意,这并不妨碍对变量的访问result.您甚至可以在访问后访问它if.如果你想要,你需要一个新的范围:{ if... }.