日期:2014-05-18  浏览次数:20888 次

如何比较两个类名和成员名不同的类,实际上相同的类?
用reflector还原了一个很大的DLL,但由于属性名和方法名很多相同,a,b,c,属性和方法都很简单的命名,存在二义性,很多错误,无法执行,所以就混淆了一下,改变成复杂的成员名,结果不是太满意,特别是接口和继承存在好多没有变化。错误三四千个,修改了一个周了,都不行。
  我想获得一个类的属性、方法名称、方法体内容,然后找到混淆后的类,判断如果相同,就分别替代。

------解决方案--------------------
使用反射区比较。

C# code
if (typeof(ClassA).GetProperties().Select(x => x.Name).Except(typeof(ClassB).GetProperties().Select(x => x.Name)).Count() == 0 && typeof(ClassB).GetProperties().Select(x => x.Name).Except(typeof(ClassA).GetProperties().Select(x => x.Name)).Count() == 0)
{
    //说明ClassA和ClassB有完全一样的属性名集合。但是不保证类型一样。你可以完善这个代码。
}