使用Reflection为不同的泛型类型实现相同的函数

时间:2016-07-21 15:32:32

标签: c# generics reflection

我正在制作一个解决方案来比较同一个对象的两个元素。 代码如下所示:

public double Compare(Data o)
    {
        double same = 0;
        double different = -1;

        foreach (var prop in o.GetType().GetProperties())
        {
            if (prop.GetValue(o) == prop.GetValue(this))
                same++;
            else
                different++;
        }            
        return (same / (different + same)) * 100;
    }

数据是我自己创建的IData接口实现的一个示例。由于存在更多类型的不同数据结构,因此在每个对象中存在相同的函数实现,其实现特定接口。 现在,这有点打扰了我,因为在不同的类中拥有完全相同的代码行似乎很愚蠢。

有没有机会,我可以为我所有不同的课程使用一种方法,仍然可以使用反射? 我想了szenario很长一段时间,只是想不出如何引用正确的“this”参考。我得到的唯一想法是,为函数编写一个带有两个参数的辅助类,并在特定的数据调用实现中调用该辅助方法。 代码看起来像这样:

class CompareHelper
{
     public double Compare(Data o, Data callingObject)
     {
        double same = 0;
        double different = -1;

        foreach (var prop in o.GetType().GetProperties())
        {
            if (prop.GetValue(o) == prop.GetValue(callingObject))
                same++;
            else
                different++;
        }  
        return (same / (different + same)) * 100;
     }
 }

还有其他建议吗?

提前致谢!

1 个答案:

答案 0 :(得分:0)

我不知道为什么我自己能搞清楚。 我现在正在使用一个抽象类,它实现了compare方法(如上所述),所有不同类型都是基类“Data”的特化。