【问题标题】:Lambda loop thru ICollection failed to find object property通过 ICollection 的 Lambda 循环未能找到对象属性
【发布时间】:2013-11-12 03:04:52
【问题描述】:

我有一个对象列表为ICollection<objectA> listA。现在我试图通过这个 listA 循环并尝试匹配一个条件并将找到的结果分配给一个变量。我在下面尝试过:

varB.someDesc = listA.FirstOrDefault(x=>x.ID == varB.ID).someDesc

抱怨x.ID 是对象空引用时出错。当我放一个断点时,我可以看到 listA 中有很多项目,并且有一个属性ID。我可以知道出了什么问题吗?

【问题讨论】:

  • 确切的错误信息是什么?我怀疑它可能在抱怨FirstOrDefault 为空的结果,而不是x.ID,正如您在问题中所说的那样。这表明列表中没有具有匹配 ID 的项目。

标签: c# lambda icollection


【解决方案1】:

我建议验证 FirstOrDefault() 的返回值如下:

var item = listA.FirstOrDefault(x=>x.ID == varB.ID);
if (item != null)
    varB.someDesc = item.someDesc;

错误可能与您想象的不完全一样。

【讨论】:

  • 详细说明,FirstOrDefault() 返回第一个匹配记录,如果没有找到匹配则返回所选类型的默认值。对于类,默认值为null,对于原始类型,您可以查找它(例如,int 为 0,bool 为 false,等等)。
【解决方案2】:

试试这个代码。

varB.someDesc = listA.Where(x=>x.ID == varB.ID).FirstOrDefault().someDesc

你最好在分配之前检查 Object Null。

【讨论】:

  • 你的代码和OP列出的代码在功能上是等价的。
猜你喜欢
  • 1970-01-01
  • 2021-04-07
  • 2013-09-05
  • 2016-09-09
  • 2012-10-03
  • 1970-01-01
  • 2013-10-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多