我在这个上失去了理智。我有两个清单。当我清除一个列表时,两个列表都被清除了!我无法找出这种情况发生的地点或原因。
这是我的代码:
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
正如你在清晰之前所看到的那样,艺术家和艺术家都选择了121件。当我清除那个时,另一个也被清除了。
以下是声明列表的方式:
public static List<string> Artists = new List<string>();
public static List<string> ArtistsSelected = new List<string>();
我只有一个地方可以加载艺术家,并且在此之后它不会被再次调用,并且根本没有地方看起来像这样:
Artists = ArtistsSelected;
或此:Artists.Clear()
。
任何帮助将不胜感激!哦,我也尝试将ArtistsSelected
重命名为像SelectedArtists
这样的东西,它仍然没有相位。
*更新*
因为有些人在问,艺术家是如何通过致电来加载的:
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 :(得分:5)
Globals.SelectedArtists = Globals.Artists;
是你的罪魁祸首。
这样做会使两个字段都指向同一个列表实例。
您需要做的是:
Globals.SelectedArtists.AddRange(Globals.Artists);