質問
長々と書きましたが、シェイクスピアの"マクベス"シングルstaticメソッドがコピープロパティの値からオブジェクトです。なケアをどのようなオブジェクトでは、みな同じです。では何が必要で、私は工学ですが、何を改善す。
こちらのコード:
public class ShallowCopy
{
public static void Copy<From, To>(From from, To to)
where To : class
where From : class
{
Type toType = to.GetType();
foreach (var propertyInfo in from.GetType().GetProperties(BindingFlags.GetProperty | BindingFlags.Public | BindingFlags.Instance))
{
toType.GetProperty(propertyInfo.Name).SetValue(to, propertyInfo.GetValue(from, null), null);
}
}
}
私も使っていまし
EmployeeDTO dto = GetEmployeeDTO();
Employee employee = new Employee();
ShallowCopy.Copy(dto, employee);
解決
DTOはシリアル化可能ですか?私はそう期待しています、その場合:
MemberInfo[] sm = FormatterServices.GetSerializableMembers(typeof(From));
object[] data = FormatterServices.GetObjectData(from, sm);
FormatterServices.PopulateObjectMembers(to, sm, data);
しかし、私はこの一般的なアプローチに本当に同意していないことに注意してください。各DTOが実装するDTOをコピーするための強力な契約を希望します。
他のヒント
-
命名規則に準拠するように型パラメーター名を変更します。 TFromとTTo、またはTSourceとTDest(またはTDestination)。
-
ほとんどの作業は、一般的なメソッドではなく一般的なタイプで行います。これにより、プロパティをキャッシュしたり、型推論を許可したりできます。型推論は<!> quot; TFrom <!> quot;で重要です。匿名型の使用を許可するため、パラメータ。
-
プロパティのコピーを行うコードを動的に生成し、<!> quot; from <!> quotに有効なデリゲートに保持することにより、潜在的に高速化することができます。タイプ。または、すべてのfrom / toペアに対して潜在的に生成します。つまり、実際のコピーではリフレクションを使用する必要はまったくありません。 (コードの準備は、タイプのペアごとに1回だけヒットしますが、ペアが多すぎないことを願っています。)
To
の新しいインスタンスを作成し、戻る前にCopy()
メソッドを呼び出した新しいメソッドが役立つ場合があります。
これに似ています:
public static To Create<From, To>(From from)
where To : class, new()
where From : class
{
var to = new To();
Copy(from, to);
return to;
}
決したいことをグループにおきまして物体の種類があ性ますが、全てではありません。の存在チェックの財産の From
オブジェクトの To
オブジェクトを増やしてからお試しくださいように設定できます。の"正しいこと"へお越しの際は、物件をお使いになれません。すべての公共性が必要な同じで、その後の確認処理を行う必要がありまますべてが設定されている作品が多い To
オブジェクトを取り扱いのない適切に
うことがで使用する場合がありま属性による装飾性を必要とするコピーを無視します。ることもできるので行との間の異なる二つの対象物をより簡単に続けている一部の公共性を生成する際に使われではなく保存のビジネスオブジェクトです。