次のコードでは、
using System;
using System.Collections.Generic;
using System.Drawing;
using System.Windows.Forms;
namespace clone_test_01
{
public partial class MainForm : Form
{
public class Book
{
public string title = "";
public Book(string title)
{
this.title = title;
}
}
public MainForm()
{
InitializeComponent();
List<Book> books_1 = new List<Book>();
books_1.Add( new Book("One") );
books_1.Add( new Book("Two") );
books_1.Add( new Book("Three") );
books_1.Add( new Book("Four") );
List<Book> books_2 = new List<Book>(books_1);
books_2[0].title = "Five";
books_2[1].title = "Six";
textBox1.Text = books_1[0].title;
textBox2.Text = books_1[1].title;
}
}
}
Book
オブジェクトタイプを使用してを作成し、List<T>
それに一意のタイトル(「1」から「5」まで)を与えるいくつかのアイテムを入力します。
次に、を作成しますList<Book> books_2 = new List<Book>(books_1)
。
この時点から、それがリストオブジェクトのクローンであることがわかりますが、book_2
からのブックオブジェクトは、のブックオブジェクトからの参照のままですbooks_1
。books_2
これは、の最初の2つの要素に変更を加えてから、の同じ要素をチェックすることで証明されていbook_1
ますTextBox
。
books_1[0].title and books_2[1].title
確かにの新しい値に変更されましたbooks_2[0].title and books_2[1].title
。
今の質問
の新しいハードコピーを作成するにはどうすればよいList<T>
ですか?アイデアはそれでbooks_1
ありbooks_2
、互いに完全に独立するようになります。
私は、MicrosoftがRubyがこのclone()
方法で行っているような、きちんとした、速くて簡単なソリューションを提供しなかったことに失望しています。
ヘルパーから本当に素晴らしいのは、私のコードを使用して、コンパイルして機能できるように、実行可能なソリューションでコードを変更することです。この問題に対して提供されている解決策を理解しようとしている初心者にとって、これは本当に役立つと思います。
編集:Book
クラスはより複雑で、より多くのプロパティを持つ可能性があることに注意してください。私は物事をシンプルに保つように努めました。