C# 反射GetValue null属性
此方法比较同一类的两个对象:C# 反射GetValue null属性,c#,.net,null,system.reflection,C#,.net,Null,System.reflection,此方法比较同一类的两个对象: foreach (var field in fields.Where(field => !objTarget .GetType().GetProperty(field).GetValue(objTarget, null) .Equals(obj.GetType().GetProperty(field).GetValue(obj, null)))) 如果这两个属性都有值,它正常工作,但有时在这两个对象中的一个对象中有一个null
foreach (var field in fields.Where(field => !objTarget
.GetType().GetProperty(field).GetValue(objTarget, null)
.Equals(obj.GetType().GetProperty(field).GetValue(obj, null))))
如果这两个属性都有值,它正常工作,但有时在这两个对象中的一个对象中有一个null属性,我如何处理它
编辑:
如果我比较两个对象,即:
var a = new Test();
var b = new Test();
a.Property1 = "1";
b.Property1 = null;
我收到空引用异常:
ConsoleApplication1.exe中发生类型为“System.NullReferenceException”的未处理异常
不要使用LINQ和
Where
方法获取变量的值并将条件放入循环中:
foreach (var field in fields)
{
var val1 = objTarget.GetType().GetProperty(field).GetValue(objTarget, null);
var val2 = obj.GetType().GetProperty(field).GetValue(obj, null));
if(val1 == null and val2 != null || val1 != null && !val1.Equals(val2))
{
// your code
}
}
什么是“工作不正常”?它是否抛出异常?如果是,那是什么?@TroyCarlson我编辑了这篇文章。谢谢这不是一种方法。这只是一个循环的一部分。也许您应该向我们展示一些连贯的代码,比如整个方法以及如何调用它。我们可以做一些假设,但是那些对我来说很明显的假设不会在我们展示的代码中导致NullReferenceException。@jmchilney-如果第一个的属性是
null
-null.Equals…
显然会导致异常,而且确实在该代码中还有很多其他地方可能发生异常(因为OP说它大部分时间都有效,所以没那么有趣)。@Alexei Levenkov,啊,是的,我错过了,因为当时的线路中断。