我们有两个类具有完全相同的公共访问器(其中许多),但来自对象层次结构中的不同区域;我们需要在这两个对象之间进行复制和比较。我们可以手动编写一个复制构造函数和一个比较运算符来比较同名访问器的值,但似乎必须有更好的方法来使用反射和 LINQ 来做到这一点。
示例:我们有 ClassA 类,它有 70 个访问器;我们还有 ClassB 类,它有 70 个访问器,它们被定义为与 ClassA 的访问器相同的名称和类型。
public class ClassA
{
int OneInt {get; set;}
int TwoInt {get; set;}
...
string OneString {get; set;}
string AnotherString {get; set;}
}
public class ClassB
{
int OneInt {get; set;}
int TwoInt {get; set;}
...
string OneString {get; set}
string AnotherString {get; set;}
}
我想要的是一种使用反射来发现 ClassA 的所有公共访问器的简单方法,并使用这些名称将 ClassB 上的相应访问器的值设置为 ClassA 上的访问器的值。粗略地说,在伪代码中:
foreach (string accName in ClassA.Accessors[])
BInstance.Accessors[accName].Value = AInstance.Accessors[accName].Value;
当然,同样的东西也可以用来测试两个类之间的相等性。我对 C# 反射和 LINQ 的了解还不足以知道如何完成这项工作,但我发誓这是相对简单的事情。