7

各フィールドを手動で設定せずに、オブジェクトの浅いコピー (新しいインスタンス) を作成しようとしています。このオブジェクトは、私が変更できるタイプではないため、オブジェクトにアクセスして ICloneable を実装することはできません...ちょっと行き詰まっています。オブジェクトを単純に複製する簡単な方法はありますか?それとも、各フィールドを新しいオブジェクトに単純にコピーする Clone() メソッドを実装する必要がありますか?

助けてくれてありがとう!

4

1 に答える 1

7

リフレクションを使用してオブジェクトのフィールドを確認し、それを使用して新しいインスタンスを設定します。

これは、引数を取らないコンストラクターの存在についていくつかの仮定を行います。

Type t = typeof(typeToClone);
var fields = t.GetFields(BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance);
var copy = Activator.CreateInstance(t);
for(int i = 0; i < fields.Length; i++)
  fields[i].SetValue(copy, fields[i].GetValue(existing));
于 2011-08-30T19:21:30.680 に答える