对象属性比较,处理空检查的最佳方法?

时间:2013-11-21 01:12:13

标签: c#

我正在查看类型的FieldInfo,并收集有关类型的属性信息。此代码如下所示:

foreach (FieldInfo f in fi)
{
    Foo<T> v = new Foo<T>();
    v.Prop = f.Name;
    v.ValA = f.GetValue(val1);
    v.ValB = f.GetValue(val2);

    if (!v.ValA.Equals(v.ValB))
    {
        variances.Add(v);
    }
}

但是,如果v.ValA和v.ValB为null,则此代码在if条件下失败。我正在寻找具有此对象的对象之间的差异,并且如果v.ValA为null并且V.ValB都为null,则它应该使if条件失败。处理此问题的建议方法是什么?

3 个答案:

答案 0 :(得分:1)

应该这么简单:

if (v.ValA == null || !v.ValA.Equals(v.ValB))
{
    variances.Add(v);
}

我之所以这样说是因为如果v.ValA不是nullv.ValB,那么无论如何它都将评估为false

答案 1 :(得分:0)

您可以执行以下操作:

if ( !(v.ValA==null && v.valB==null) || !v.ValA.Equals(v.ValB))

如果我正确地阅读了您的问题

答案 2 :(得分:0)

在等于之前,只需在if语句中添加另一个检查。例如

!(v.ValA == null && v.ValB == null)