LINQ to Objects 表达式的输入参数如何为空
How can the input parameter of a LINQ to Objects expression be null
我有一组对象正在尝试使用 LINQ 查询。莫名其妙,代码在查询特定值时崩溃。
SomeObject[] myObjects = { ... };
foreach (int id in someIDs)
{
SomeObject singleObject = myObjects.FirstOrDefault(x => x.ID = id);
}
当 id
的值为特定值时,此代码失败。我得到的错误是 x
为 NULL。 myObjects
数组不是 NULL,并且确实包含一个对象,该对象的 ID
值与失败的 id
的值相匹配。 id
的其他值不会导致错误。当 id
是失败的值时,我可以逐步执行 LINQ 表达式,因为它循环访问数组中的项目。参数 x
对集合中的每个项目都有一个值,直到它到达与问题值 id
匹配的项目之前的项目;在那一点 x
突然变成 NULL 并抛出异常。
非 NULL 集合上的 LINQ 表达式的输入参数怎么会是 NULL?即使集合不包含 ID
匹配 id
的项目,它也应该只是 return 我的对象类型的默认值,不会因 NULL 错误而崩溃。
修复空值 和 显着提高运行时性能,如下所示:
SomeObject[] myObjects = new[] { ... };
Dictionary<Int32,SomeObject> dict = myObjects
.Where( mo => mo != null )
.ToDictionary( mo => mo.id );
foreach( Int32 id in someIds )
{
if( dict.TryGetValue( id, out SomeObject singleObject ) )
{
// do stuff here
}
else
{
// don't do stuff here
}
}
我有一组对象正在尝试使用 LINQ 查询。莫名其妙,代码在查询特定值时崩溃。
SomeObject[] myObjects = { ... };
foreach (int id in someIDs)
{
SomeObject singleObject = myObjects.FirstOrDefault(x => x.ID = id);
}
当 id
的值为特定值时,此代码失败。我得到的错误是 x
为 NULL。 myObjects
数组不是 NULL,并且确实包含一个对象,该对象的 ID
值与失败的 id
的值相匹配。 id
的其他值不会导致错误。当 id
是失败的值时,我可以逐步执行 LINQ 表达式,因为它循环访问数组中的项目。参数 x
对集合中的每个项目都有一个值,直到它到达与问题值 id
匹配的项目之前的项目;在那一点 x
突然变成 NULL 并抛出异常。
非 NULL 集合上的 LINQ 表达式的输入参数怎么会是 NULL?即使集合不包含 ID
匹配 id
的项目,它也应该只是 return 我的对象类型的默认值,不会因 NULL 错误而崩溃。
修复空值 和 显着提高运行时性能,如下所示:
SomeObject[] myObjects = new[] { ... };
Dictionary<Int32,SomeObject> dict = myObjects
.Where( mo => mo != null )
.ToDictionary( mo => mo.id );
foreach( Int32 id in someIds )
{
if( dict.TryGetValue( id, out SomeObject singleObject ) )
{
// do stuff here
}
else
{
// don't do stuff here
}
}