C#List.Clear()清除所有列表

时间:2016-12-28 06:07:35

标签: c# list

我在这个上失去了理智。我有两个清单。当我清除一个列表时,两个列表都被清除了!我无法找出这种情况发生的地点或原因。

这是我的代码:

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

1 个答案:

答案 0 :(得分:5)

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

这样做会使两个字段都指向同一个列表实例。

您需要做的是:

Globals.SelectedArtists.AddRange(Globals.Artists);