2016-12-28 6 views
0

私はこの1つに私の頭を失っています。私は2つのリストを持っています。 1つのリストをクリアすると、両方のリストがクリアされます!私はどこで、なぜこれが起こっているのかを知ることはできません。あなたは明確に、アーティストとArtistsSelected前に見ることができるように両方が121個のアイテムを持っているC#List.Clear()ALLリストをクリアする

A: 121 As: 121 
A: 0  As: 0 

:上記のコードから

Console.WriteLine("A: {0} \t As: {1}", Globals.Artists.Count(), Globals.ArtistsSelected.Count); 
Globals.ArtistsSelected.Clear(); 
Console.WriteLine("A: {0} \t As: {1}", Globals.Artists.Count(), Globals.ArtistsSelected.Count); 

結果は次のとおりです。

は、ここに私のコードです。私はそれをクリアすると、もう一方もクリアされます。私は唯一のアーティストをロードする一つの場所を持っている

public static List<string> Artists = new List<string>(); 
public static List<string> ArtistsSelected = new List<string>(); 

、それはその時点の後に再び呼び出されませんし、全く場所は次のようになりません:ここで

は、リストが宣言されている方法です Artists = ArtistsSelected;これはArtists.Clear()です。

ご協力いただければ幸いです!ああ、私はまた、SelectedArtistsのようなものにArtistsSelectedの名前を変更しようとしたし、あなたのいくつかはここでは、求めているので、それはまだ

it.`相* UPDATE *

なかったアーティストの呼び出しによってロードされている方法です。

public static List<string> getArtistList() 
    { 
     List<string> artists = new List<string>(); 
     SqlConnection con = new SqlConnection(); 
     SqlCommand cmd = new SqlCommand(); 
     string query = "SELECT Name FROM Artists "; 

     con.ConnectionString = SQL_getConnectionString.conStr(); 
     con.Open(); 

     cmd.Connection = con; 
     cmd.CommandText = query; 

     SqlDataReader reader = cmd.ExecuteReader(); 
     while (reader.Read()) 
     { 
      artists.Add(reader.GetString(0)); 
     } 

     con.Close(); 
     return artists; 
    } 
+0

は、なぜあなたは 'Artists'ためArtistsSelected'と'カウント() ''は 'Count'を使用しない:あなたがする必要がどのような

は、次のでしょうか? – Abion47

+0

@ Abion47 - 良いキャッチ。それは他のコードから残されていました。 'Count()'だけを削除しました。同じ問題 –

+1

この場合、Globalsクラスの詳細を参照すると便利です。コードのある時点で、ArtistsとArtistsSelectedは同じ参照に設定されている必要があります。 – FishBasketGordo

答えて

5

public static void populateArtistList() 
    { 
     Globals.Artists = SQL_Read.getArtistList(); 
     Globals.SelectedArtists = Globals.Artists; 
    } 

はその後、ここでSQLの部分ですはあなたの犯人です。

このようにすると、両方のフィールドが同じリストインスタンスを指します。

Globals.SelectedArtists.AddRange(Globals.Artists);

+0

'Globals.SelectedArtists = new List (グローバル。アーティスト)、 ' –

+1

@KerryWhiteそれも機能しますが、元のオブジェクトを置き換えています。いずれにしても、リストをグローバルなものとして公開すると、面白い問題が発生する可能性があります。 – Klinger

+0

私もあなたのやり方を試しましたが、うまくいくようです。私は元のオブジェクトを置き換えるのが好きではないので、私はあなたのやり方やMartheenの方法(上記)に固執します。再度、感謝します! –

関連する問題