在if语句中使用var

c#

鉴于:

public class Foo
{
    public Bar GetBar() => null;
}

public abstract class Bar
{
    public abstract void Baz();
}

这有效:

var foo = new Foo();
var bar = foo.GetBar();
if (bar != null)
{
    bar.Baz();
}

这也有效:

var foo = new Foo();
if (foo.GetBar() is Bar bar)
{
    bar.Baz();
}

但是为什么在 if 语句中使用 var 不起作用呢?

这可以编译但会抛出空引用异常:

if (foo.GetBar() is var bar)
{
    bar.Baz(); // <-- bar can still be null?
}

回答

var模式匹配空值,而式模式不-这一切就是这么简单,真的。

从参考文档(强调我的):

从 C# 7.0 开始,您可以使用var模式来匹配任何表达式,包括 null,并将其结果分配给新的局部变量

var当你需要一个内的临时变量图案是有用的Boolean表达保持中间计算的结果。var当您需要在 switch 表达式或语句的 case 守卫中执行额外检查时,您还可以使用模式

你可以使用一个简单的属性模式作为替代:

var foo = new Foo();
if (foo.GetBar() is {} bar)
{
    bar.Baz();
}

{}是一个匹配任何非空值的属性模式,但bar仍然像 via 一样输入var


以上是在if语句中使用var的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>