对象列表无法按预期工作
本文关键字:工作 列表 对象 | 更新日期: 2023-09-27 18:26:31
我想创建一个对象列表。我创建了一个类,我将使用我的对象列表
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添加了一个新对象,我就不明白后来应用于不同项的命令是如何更改此列表的内容的。
它们是相同的项
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"} }
};
}
因此,您正在将"mySet的setOfValues"设置为位于myArrayOfStrings地址的数组。这意味着mySet的setOfValues不是一个单独的对象,而是一个相同的对象。这就是为什么当您更新myArrayOfStrings时,mySet的值也会发生变化。
要获得您要查找的结果,请循环myArrayOfStrings并将mySet.setOfValues[i]设置为myArrayOfStrings[i],这样您就应该设置好了!