【问题标题】:Using Enumerable.Contains method for null item checking使用 Enumerable.Contains 方法进行空项检查
【发布时间】:2020-06-10 04:38:35
【问题描述】:

假设我有一个非常简单的IEnumerable,看起来像这样:

IEnumerable<string> foo = new[] { "Apple", null, "Orange" };

我想检查它是否包含null 项目。根据我在 Google 上的发现,我可以这样做:

bool containsNull = foo.Any(item => item == null);

Enumerable.Contains 方法呢?以下对我来说似乎很明显,但我从来没有这样看过:

bool containsNull = foo.Contains(null);

导致使用Enumerable.Any 方法的先前表达式是否有任何问题?

【问题讨论】:

  • 不,应该也更快
  • 请看这个topic
  • 我会使用 Contains 来检查元素是否在数组中,并在需要检查更复杂的东西时使用 Any,例如 foo.Any(item => item != null && item [0] == 'A' && item.Length == 5)

标签: c# linq c#-6.0


【解决方案1】:

“包含”运算符检查集合中是否存在指定元素并返回一个布尔值。

"Any" 检查任何元素是否满足给定条件?在下面的示例中,任何操作用于检查任何学生是否为青少年。

在这种情况下最好使用“ANY”

您可以访问https://www.tutorialsteacher.com/linq/linq-quantifier-operators

【讨论】:

    【解决方案2】:

    这是真的,在大多数情况下Contains(null) 会完成这项工作。但是ArgumentNullException 存在漏洞。一个例子可以是:

    string foo = "foo";
    bool containsNull = foo.Contains(null); //throws exception
    

    在您的情况下,您已经将泛型类型设置为string,因此使用Contains 是安全的。

    【讨论】:

    • 请注意,在string 的情况下,foo.Contains() 查找子字符串,而foo.AsEnumerable().Contains() 查找包含的字符(如果传递 null,则不会编译)。
    猜你喜欢
    • 2019-07-21
    • 2016-09-10
    • 1970-01-01
    • 1970-01-01
    • 2013-01-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多