c#null和Any()检查的快捷方式

Ian*_*ink 10 c# linq

通常在C#中我必须这样做

if(x.Items!=null && x.Items.Any())
{ .... }
Run Code Online (Sandbox Code Playgroud)

收藏品有捷径吗?

Jon*_*eet 51

在C#6中,您将能够编写:

if (x.Items?.Any() == true)
Run Code Online (Sandbox Code Playgroud)

在此之前,您总是可以编写自己的扩展方法:

public static bool NotNullOrEmpty<T>(this IEnumerable<T> source)
{
    return source != null && source.Any();
}
Run Code Online (Sandbox Code Playgroud)

然后使用:

if (x.NotNullOrEmpty())
Run Code Online (Sandbox Code Playgroud)

更改名称以满足您的口味,例如NullSafeAny可能更符合您的喜好 - 但我肯定会在名称中清楚地表明它是一个有效的呼叫,即使它x是空的.

  • @Ctrl_Alt_Defeat:不,`x.Items?.Any()`有一个`Nullable <bool>`类型,所以你需要`== true`--这意味着如果`不满足条件*' x.Items`返回`null`.这与`if(x.Items?.Any!= false)`不同,如果`x.Items`为null,结果将为null,不等于false,因此条件*将*为满足. (5认同)
  • @JustFair:是的,我非常具体地提到了 C# 而不是 .NET。如果您使用的是 C# 6 或更高版本的编译器,则可以在 .NET 2.0 中执行此操作。但你*不能*使用 C# 5 来做到这一点。语言和框架版本不一样。 (3认同)
  • 在 C# 6 示例中,您是否必须执行 == true - 或者 if (x.Items?.Any()) 工作并且如果 true 会掉入该块中 - 可以说只节省了几次击键并且可能 == true 使得它更清晰 (2认同)