我正在制作一个解决方案来比较同一个对象的两个元素。 代码如下所示:
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;
}
}
还有其他建议吗?
提前致谢!
答案 0 :(得分:0)
我不知道为什么我自己能搞清楚。 我现在正在使用一个抽象类,它实现了compare方法(如上所述),所有不同类型都是基类“Data”的特化。