【问题标题】:Reflection based comparion of two object values [duplicate]基于反射的两个对象值的比较[重复]
【发布时间】:2015-07-01 14:16:39
【问题描述】:

是否有任何适用于 .net 的库/框架可以采用两个相同类型的对象并使用所有属性的反射匹配值?

我不得不比较两个具有 2 个 Nullable DateTime 属性的对象,并且代码看起来很难看:

private bool SameValues(ExpiryDates ExpiryDates1, ExpiryDates ExpiryDates2)
{
        //Assume they are the same value and then look for differences
        bool result = true;

        if (ExpiryDates1.PSL_ExpiryDate.HasValue != ExpiryDates2.PSL_ExpiryDate.HasValue)
        {
            result = false;
        }

        if (ExpiryDates1.MNL_ExpiryDate.HasValue != ExpiryDates2.MNL_ExpiryDate.HasValue)
        {
            result = false;
        }

        if ((ExpiryDates1.MNL_ExpiryDate != null) && (ExpiryDates2.MNL_ExpiryDate != null))
            if (ExpiryDates1.MNL_ExpiryDate.Value != ExpiryDates2.MNL_ExpiryDate.Value)
                result = false;

        if ((ExpiryDates1.PSL_ExpiryDate != null) && (ExpiryDates2.PSL_ExpiryDate != null))
            if (ExpiryDates1.PSL_ExpiryDate.Value != ExpiryDates2.PSL_ExpiryDate.Value)
                result = false;

        return result;
}

【问题讨论】:

  • @Adriano Repetti :确实非常好的答案,从未想过为此目的使用序列化,太棒了!
  • 谢谢,但也可以在其他答案中查看我的评论。这很容易但很慢,二进制与逻辑等价可能很棘手。 1.0 == 1.0f? NaN == NaN?转换运算符和自定义比较呢?您可以使用它,但在非常具体和有限的场景中。否则手动(该答案中的第二种方法)或使用库(Pranab 的答案)

标签: c#


【解决方案1】:

据我所知,没有可用的库,但在 .NET 框架中用于比较相同类型的对象,我们有 IComparare 接口,您可以使用该接口并在两个相同类型的对象之间进行比较。

public class BoxComp : IComparer<Box>
{
    // Compares by Height, Length, and Width. 
    public int Compare(Box x, Box y)
    {
       ///you code to do comparison
    }
}

你也可以让它通用。

你可以检查这个:Compare .NET Objects 但我建议去比较实施,因为没有太大的需要,因为你只想比较两个对象的日期时间。

【讨论】:

  • 我希望能够轻松地比较具有相同值的相同类型的两个对象,而不必为每种类型编写 IComparer。一定有一种更简单的方法可以通过反射来做到这一点。
  • @Arjang - 我建议为此使用泛型或检查我在回答中给出的 codeplex 链接
  • @Pranya Rana :另一个问题的链接显示使用序列化作为解决方案,我喜欢这种方法比我想要的要好得多。
  • 是的,看起来不错...
  • @Pranya Rana :但它似乎有它自己的问题,我想我必须使用这种方法来明确说明有什么不同并只寻找那些,而不是考虑值的任何变化不同
猜你喜欢
  • 2021-09-19
  • 2013-10-02
  • 2019-10-21
  • 1970-01-01
  • 2016-02-24
  • 2016-09-07
  • 1970-01-01
  • 2021-07-10
  • 2013-05-06
相关资源
最近更新 更多