[英].NET: How to copy data between different classes with the similar members (type & name)?
[英]Clean way to Compare / Copy between Similar Classes
我們有兩個類,它們具有完全相同的公共訪問器(很多訪問器),但是它們來自對象層次結構的不同區域。 我們需要在這兩個對象之間進行復制和比較。 我們可以手動編寫一個復制構造函數和一個比較運算符,用於比較同名訪問器的值,但是似乎必須有一種使用反射和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上的訪問器的值。 大致來說,在psuedocode中:
foreach (string accName in ClassA.Accessors[])
BInstance.Accessors[accName].Value = AInstance.Accessors[accName].Value;
而且,當然,同一件事可用於測試兩個類之間的相等性。 我對C#反射和LINQ的了解不足以知道如何完成此工作,但是我發誓這是相對簡單的事情。
如何使用AutoMapper :
Mapper.CreateMap<ClassA, ClassB>();
接着:
ClassA classA = ...
ClassB classB = Mapper.Map<ClassA, ClassB>(classA);
它基本上是偽代碼的實現。
您的粗略偽代碼有些准確。 讓我整理一下:
foreach (var propertyA in typeof(ClassA).GetProperties())
{
var propertyB = typeof(ClassB).GetProperty(propertyA.Name);
var valueA = propertyA.GetValue(objectA, null);
propertyB.SetValue(objectB, valueA, null);
}
顯然,這不會執行錯誤檢查和類似的操作,但是應該可以完成工作。
您可以在Linq中做到這一點,但我認為這不會更干凈。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.