Pau*_*ier 1 c# linq reflection accessor
我们有两个类具有完全相同的公共访问器(以及其中许多),但它们来自对象层次结构中的不同区域; 我们需要在这两个对象之间进行复制和比较.我们可以手动编写一个复制构造函数和一个比较运算符来比较同名访问器的值,但似乎必须有一个更好的方法来使用反射和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;}
}
Run Code Online (Sandbox Code Playgroud)
我想要的是一种使用反射来发现ClassA的所有公共访问器的简单方法,并使用这些名称将ClassB上相应访问器的值设置为ClassA上访问器的值.粗略地说,在伪代码中:
foreach (string accName in ClassA.Accessors[])
BInstance.Accessors[accName].Value = AInstance.Accessors[accName].Value;
Run Code Online (Sandbox Code Playgroud)
当然,同样的事情可以用来测试两个类之间的相等性.我对C#reflection和LINQ的了解并不足以让我知道如何完成这项任务,但我发誓这是相对简单的.
如何使用AutoMapper:
Mapper.CreateMap<ClassA, ClassB>();
Run Code Online (Sandbox Code Playgroud)
然后:
ClassA classA = ...
ClassB classB = Mapper.Map<ClassA, ClassB>(classA);
Run Code Online (Sandbox Code Playgroud)
它基本上是伪代码的实现.