2016-12-13 16 views
0

私はクラスの動物を持ち、このクラスのリストを作成しました。C#オブジェクトのリストからオブジェクトをコピーし、リスト内の別の場所に貼り付けます。

List<Animal> animalLibrary = new List<Animal>(); 

このリストからオブジェクトをコピーして貼り付け、リスト内の別の場所に配置します。ですから、私は例えばanimalLibrary [c]のコピーを作成し、このオブジェクトをanimalLibrary []内の別の場所に貼り付けたいと思うでしょう。

これをコピーに使用すると、動作するようです。

Clipboard.SetDataObject(animalLibrary[c]); 

これを使用して貼り付けますが、代わりにmsgboxが表示されます。

IDataObject iData = Clipboard.GetDataObject(); 
if (iData.GetDataPresent(DataFormats.Serializable)) 
{ 
    animalLibrary.Insert(c, (Animal)iData.GetData("Animal")); 
} 
else 
{ 
    MessageBox.Show("Could not paste the data"); 
} 
Get_Data(); 
Load_Data(); 

強制的に挿入すると、NullReferenceExceptionからデータを表示します。

編集: mammaraのアドバイスを受け、Animalクラスのコピーを作成し、animalLibrary.Insert(index + 1、a)を使用して貼り付けました。 'a'は動物のコピーです。

+0

Clipboardクラスは、実際の_System ClipBoard_を表します。コード内のオブジェクトをコピーすることとは関係ありません。あなたの場合、単に新しいAnimalオブジェクトを作成し、そのオブジェクトをあなたのリストに追加することができます。あるいは、Animalが 'Clone()'メソッドを使ってオブジェクトのコピーを作成するための 'ICloneable'インタフェースを実装するようにすることもできます。 – mammago

+0

デバッガで実行することをお勧めします。 –

+0

ここでクリップボードを使用する理由はわかりませんが、オブジェクトをcbに配置するには、シリアル化が必要です。 –

答えて

0

これは、あなたが同じリスト内の別の「場所」にリストから項目を移動することができる方法です。

var list = new List<int>() { 1, 2, 3}; 

// get the object from the list 
var value = list[0]; 
// insert it at the end of the list. 
list.Insert(3, value); 
// list is now { 1, 2, 3, 1} ] 
+0

元の質問のどこに_moving_について何か言いません。 OPはオブジェクトをコピーしてコピーをリストに挿入しようとしています。 –

+0

ありがとうございました。 – Kinetic

関連する問題