gpt4 book ai didi

c# - 对象引用未设置为实例但不为空

转载 作者:行者123 更新时间:2023-11-30 13:14:58 29 4
gpt4 key购买 nike

我在我的过程中遇到了一些意外行为。我正在执行以下操作。

IEnumerable<Thing> things = ...;
IEnumerable<Thing> subset = things.Where(a => a.SomeFlag);
String info = "null: " + (subset == null);

上面的工作和信息告诉我对象不是null。所以我想通过这个检查子集中元素的数量。

IEnumerable<Thing> things = ...;
IEnumerable<Thing> subset = things.Where(a => a.SomeFlag);
String info = "null: " + (subset == null);
String count = subset.Count();

现在我得到一个异常并给我错误信息:

Object reference not set to an instance of an object.

我错过了什么?!

最佳答案

subset 中的 Thing 之一可能是 null。你可以试试这个:

IEnumerable<Thing> subset = things.Where(a => a != null && a.SomeFlag);

请注意,由于 Linq 的惰性求值方式,您不会在调用 .Where 时得到任何异常,因为此时它所做的只是设置条件以过滤 的元素>事情。只有稍后当您调用 .Count 时,它才会真正评估结果。

更新:随着新的null-condition operator在 C# 6(也称为安全导航或“猫王”运算符)中,我们可以更简洁地做同样的事情:

IEnumerable<Thing> subset = things.Where(a => a?.SomeFlag);

关于c# - 对象引用未设置为实例但不为空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18175626/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com