2016-12-28 52 views
0

我在這一個上失去了我的頭。我有兩個列表。當我清除一個列表時,這兩個列表都已清除!我找不到這是怎麼發生的。C#List.Clear()清除所有列表

這裏是我的代碼:

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); 

從上面的代碼的結果是:

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

正如你可以清楚,藝術家和ArtistsSelected看到之前都有121項。當我清除一個,另一個也清除。

以下是名單是如何宣稱:

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

我只有一個加載藝術家一個地方,它不會在該點之後再次打電話,和所有沒有一個地方是這樣的: Artists = ArtistsSelected;或者這個:Artists.Clear()

任何幫助將不勝感激!哦,我也試過重新命名ArtistsSelected喜歡的東西SelectedArtists和它仍然沒有相it.`

* UPDATE *

因爲你們當中有些人都在問,這裏是藝術家是如何通過調用加載:

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

那麼這裏的SQL語句組成部分:

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

爲什麼你使用'Count'爲'ArtistsSelected'和'伯爵()''爲Artists'? – Abion47

+0

@ Abion47 - 好。這是從其他代碼遺留下來的。我只用Count來移除Count()。同樣的問題 –

+1

在這種情況下可以看到更多的Globals課程。在您的代碼中的某個時刻,Artists和ArtistsSelected必須設置爲相同的引用。 – FishBasketGordo

回答

5

Globals.SelectedArtists = Globals.Artists;是你的罪魁禍首。

這樣做會使兩個字段指向相同的列表實例。

你需要做的是以下幾點:

Globals.SelectedArtists.AddRange(Globals.Artists);

+0

Got it! 'Globals.SelectedArtists =新列表(Globals。藝術家);」 –

+1

@KerryWhite這也適用,但是您正在替換原始對象。無論如何,將列表公開爲一個像這樣的全局列表可能會導致一些有趣的問題。 – Klinger

+0

我也試過你的方式,它似乎也工作。我不喜歡替換原始對象,所以我會堅持你的方式或Martheen的方式(上圖)。再次感謝! –