参照なしでクラスオブジェクトのコピーを作成するにはどうすればよいですか? ICloneable
は、(浅いコピーを介して)クラスオブジェクトのコピーを作成しますが、ディープコピーはサポートしません。私は、クラスオブジェクトのすべてのメンバーを読み込み、メンバ名を指定せずに別のオブジェクトに深くコピーするのに十分なスマートな関数を探しています。リファレンスなしでクラスオブジェクトのコピーを作成する方法は?
5
A
答えて
4
私は基本的にあなたがICloneableが、私はこのスレッドを参照しています深いコピー
public static T DeepCopy(T other)
{
using (MemoryStream ms = new MemoryStream())
{
BinaryFormatter formatter = new BinaryFormatter();
formatter.Serialize(ms, other);
ms.Position = 0;
return (T)formatter.Deserialize(ms);
}
}
をしていないについて言ったので、これを行うには、独自の関数を記述し、解決策として、これを見てきました。 copy a class, C#
0
public static object Clone(object obj)
{
object new_obj = Activator.CreateInstance(obj.GetType());
foreach (PropertyInfo pi in obj.GetType().GetProperties())
{
if (pi.CanRead && pi.CanWrite && pi.PropertyType.IsSerializable)
{
pi.SetValue(new_obj, pi.GetValue(obj, null), null);
}
}
return new_obj;
}
あなたのニーズに合わせて調整することができます。例えば、
if (pi.CanRead && pi.CanWrite &&
(pi.PropertyType == typeof(string) ||
pi.PropertyType == typeof(int) ||
pi.PropertyType == typeof(bool))
)
{
pi.SetValue(new_obj, pi.GetValue(obj, null), null);
}
OR
if (pi.CanRead && pi.CanWrite &&
(pi.PropertyType.IsEnum || pi.PropertyType.IsArray))
{
...;
}
[クローンオブジェクト全体のグラフ]の
+0
これは何とか再帰的に見えませんか? –
関連する問題
- 1. クラスオブジェクトのスワイプ配列のコピーを作成する方法
- 2. PHPで基底クラスオブジェクトとして派生クラスオブジェクトを作成する方法
- 3. 新しいクラスなしで別のクラスオブジェクトを作成する方法
- 4. 複数のオブジェクトからクラスオブジェクトを作成する方法は?
- 5. クラスオブジェクトの両端キューを作成する方法は?
- 6. ルビでクラスオブジェクトの配列を作成する方法
- 7. は、C#でクラスオブジェクトを作成
- 8. クラスオブジェクトのリストを作成して別のクラスオブジェクトと比較する
- 9. リファレンスからの共有ポインタを作成してオブジェクトをコピーするのはなぜですか?
- 10. ゲームのループでクラスオブジェクトを作成する
- 11. クラスオブジェクトのコピー
- 12. pythonで非テキストバイナリファイルの正確なコピーを作成する方法
- 13. クラスオブジェクトの操作方法C++
- 14. C++でのクラスオブジェクトの作成
- 15. Excelでセルへの静的リファレンスを作成する方法は? Excelで
- 16. リスト<String>クラスオブジェクトを作成する方法
- 17. クローン作成時にクラスオブジェクトに独自のコピーがあることを確認する方法
- 18. 作成方法C++でコンストラクタをコピー
- 19. Pythonでクラスオブジェクトをタイプヒントする方法は?
- 20. uiviewのコピーを作成する方法(元のuiviewへのポインタではない)
- 21. エラーなしでFirebaseリファレンスを作成する
- 22. C++ Linked Listのコピーをクラスオブジェクトとして作成するにはどうすればよいですか?
- 23. コピー不可能な要素のコンテナを作成する方法
- 24. xcode 4.2でリファレンスを作成する
- 25. C++:クラスオブジェクトのベクトルを作成する
- 26. ライブラリをコピーするカスタムターゲットを作成する方法は?
- 27. C++で配列をコピーする - リファレンス
- 28. ウェブページをコピーするためのPHPスクリプトの作成方法は?
- 29. ハイブでテーブルの空のコピーを作成する方法
- 30. オブジェクトのコピーを作成してオリジナルと比較する方法
可能重複(http://stackoverflow.com/questions/2417023/clone-whole-object-graph) – xanatos
迅速かつ汚い解決策は、オブジェクトをシリアライズし、直ちに別のオブジェクトにデシリアライズすることです。もちろん、オブジェクトが適切にシリアル化できるかどうかによって異なります... – canon