(args is { Length: > 0}) 和 args.Length 之间的区别是什么?

4

我正在查看.NET运行时中的一些代码,注意到他们使用以下方式而不是:

if (args.Length > 0)

他们使用了这个:

if (args is { Length: > 0})

您知道使用第二种方法是否有任何优势吗?第二种方法似乎更长更难阅读,但出于某种原因,使用了它?


1
你在运行时看到这段代码是在哪里? - DavidG
看起来这是C#8提案中的一部分,他们称之为属性模式匹配。 - Jonesopolis
@DavidG 我在这里看到了它:链接 - DenisSarrazin
@Jonesopolis 这是C#8的属性模式{ Length: ... }和C#9的关系模式>0的组合。 - pinkfloydx33
1个回答

5
如果args为null,则args.Length > 0会抛出NullReferenceException异常。
在相同情况下,args is { Length: > 0}只会计算为false

3
你可以这样做:args?.Length > 0 - DenisSarrazin
1
你可以这样写,但代码维护者可能会认为 args is { Length: > 0} 更易读,或者允许添加比仅仅 Length > 0 更多的条件。 - Orion

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接