3

2 つの変数を保存し、それらが変更されていないかどうかを確認する必要があります。

List<CatalogInfo> list_catalogs = new List<CatalogInfo>();
List<FileInfo> list_files = new List<FileInfo>(); 
List<CatalogInfo> list_catalogs_for_check_changed = new List<CatalogInfo>();
List<FileInfo> list_files_check_changed = new List<FileInfo>();

私がする時:

list_catalogs_for_check_changed = list_catalogs;
list_files_check_changed = list_files;

しかし、list_catalogs または list_files アイテムに追加すると、debager でアイテムが list_catalogs_for_check_changed または list_files_check_changed に追加されることがわかります。どうして???変数でアイテムを追加しません。

  list_catalogs.Add(new CatalogInfo() { Action = "Create", Path = folderBrowserDialog1.SelectedPath });
4

3 に答える 3

6

これを行う場合:

list_catalogs_for_check_changed = list_catalogs;

リストのコピーを作成しているのではなく、同じリストへの新しい参照を割り当てています。同じ項目で新しいリストを作成する場合は、次の操作を行います。

    list_catalogs_for_check_changed = new List<CatalogInfo>(list_catalogs);

これにより、 new が割り当てList<CatalogInfo>られ、要素のコピー元のリストが渡されるため、同じ項目を持つ 2 つの独立したリストが作成されます。

于 2013-10-28T08:22:11.597 に答える
3

変数でアイテムを追加しません。

確かに、あなたはしません。リストにアイテムを追加しています。もしそうなら(質問から):

list_catalogs_for_check_changed = list_catalogs;
list_files_check_changed = list_files;

次に、 と の両方list_catalogs_for_check_changedが の同じリストlist_catalogsへの参照を保持します。同様に、同じs のリストへの参照を保持します。したがって、そのリストに項目を追加すると、いずれかの変数を介して表示されます。CatalogInfolist_fileslist_files_check_changedFileInfo

変数はリストではありません。リストはマネージ ヒープのどこかにあります。変数はリストへの単なる参照です。1 つのリスト変数を別のリスト変数に割り当てると、参照がコピーされます。リストのコピーは作成しませ

于 2013-10-28T08:21:40.497 に答える
1

あなたがするとき

list_catalogs_for_check_changed = list_catalogs;

referenceを list_catalogsに渡しています。あなたはそれをコピーしたい。

これは、値型と参照について説明する記事です

于 2013-10-28T08:22:15.420 に答える