对象列表无法按预期工作

时间:2015-12-13 01:44:00

标签: c#

我想创建一个对象列表。我创建了一个类,我将使用我的对象列表

public class DataSet 
{
    public string[] setOfValues = new string[5];
}

当我在代码中使用这个类时,我无法删除字符串数组,因为对象列表也会被更改。

    void Button1Click(object sender, EventArgs e)
    {
        List<DataSet> myListOfDataSets = new List<DataSet>();
        DataSet mySet = null;
        string[] myArrayOfStrings = {"One", "Two", "Three", "Four", "Five"};

        mySet = new DataSet();
        mySet.setOfValues = myArrayOfStrings;
        myListOfDataSets.Add(mySet);

        for(int i = 0; i < 5; i++)
        { //this command wipes off the values from myListOfDataSets
            myArrayOfStrings[k] = string.Empty; 
        }
    }
}

我希望能够在不影响myListOfDataSets的情况下重用myArrayOfStrings。 一旦我向myListOfDataSets添加了一个新对象,我就不明白以后命令如何应用于另一个项目会改变这个列表的内容。

2 个答案:

答案 0 :(得分:3)

他们是相同的项目!

C#中的类和数组变量只是引用。实际的对象在某处的堆中关闭。您所做的所有分配只是为同一个对象移动引用。

您可以做的是替换参考:

void Button1Click(object sender, EventArgs e)
{
    List<DataSet> myListOfDataSets = new List<DataSet>();
    DataSet mySet = null;
    string[] myArrayOfStrings = {"One", "Two", "Three", "Four", "Five"};

    mySet = new DataSet();
    mySet.setOfValues = myArrayOfStrings;
    myListOfDataSets.Add(mySet);

    //sets variable to **new** object instance, so it no
    // longer refers to the old one
    myArrayOfStrings = new string[] {"","","","",""};

    //This whole section is now redundant
    for(int i = 0; i < 5; i++)
    { //this command wipes off the values from myListOfDataSets
        myArrayOfStrings[k] = string.Empty; 
    }
}

你可以进一步显着缩短所有这些代码:

void Button1Click(object sender, EventArgs e)
{
    var myListOfDataSets = new List<DataSet>
    {
      new DataSet() {setOfValues = {"One", "Two", "Three", "Four", "Five"} }
    };
}

答案 1 :(得分:1)

所以发生的事情是你将mySet的setOfValues设置到位于myArrayOfStrings&#39;的数组中。地址。这意味着mySet的setOfValues不是一个单独的对象,而是一个单独的对象,而不是你指定的对象,而是同一个对象。这就是为什么当你更新myArrayOfStrings时,mySet的值也会改变。

要获得您想要的结果,请遍历myArrayOfStrings并将mySet.setOfValues [i]设置为myArrayOfStrings [i],您应该设置好!