Stu*_*wig 3 c# linq-to-entities
可以编写此代码,以便在与具有null Parent的对象(x)进行比较时,将返回列表中具有null属性null的项吗?
MyObject obj = objList.FirstOrDefault(o => n.Parent.Equals(x.Parent));
Run Code Online (Sandbox Code Playgroud)
假设正确地重写了"Equals"方法,那么在"objList"中有一个带有null Parent的项目时会出现这种情况 - "对象引用未设置为对象的实例".例外.
我认为这是因为如果n.Parent为null,则不能调用其Equal方法.
无论如何,我目前使用这种方法:
MyObject obj = null;
foreach (MyObject existingObj in objList)
{
bool match = false;
if (x.Parent == null)
{
if (existingObj.Parent == null)
{
match = true;
}
}
else
{
if (existingObj.Parent != null)
{
if (x.Parent.Equals(existingObj.Parent))
{
match = true;
}
}
}
if (match)
{
obj= existingObj;
break;
}
Run Code Online (Sandbox Code Playgroud)
因此,虽然它确实有效,但它并不是很优雅.
这与此无关FirstOrDefault,但它是静态Object.Equals方法解决的常见问题.你要:
MyObject obj = objList.FirstOrDefault(o => Object.Equals(o.Parent, x.Parent));
Run Code Online (Sandbox Code Playgroud)
顺便说一句,该方法看起来像这样:
public static bool Equals(Object objA, Object objB)
{
// handle situation where both objects are null or both the same reference
if (objA == objB)
return true;
// both are not null, so if any is null they can't be equal
if (objA == null || objB == null)
return false;
// nulls are already handled, so it's now safe to call objA.Equals
return objA.Equals(objB);
}
Run Code Online (Sandbox Code Playgroud)
即使该方法不存在,您仍然可以这样编写您的作业:
MyObject obj = objList.FirstOrDefault(x.Parent == null ?
o => o.Parent == null :
o => x.Parent.Equals(o.Parent));
Run Code Online (Sandbox Code Playgroud)
根据是否x.Parent为null,它使用不同的lambda .如果它为null,则只需要查找Parentnull 为的对象.如果没有,它总是安全的,x.Parent.Equals并且使用lambda这样做.
| 归档时间: |
|
| 查看次数: |
443 次 |
| 最近记录: |