我正在做一个c#程序,当我修改我的list<> menor
的某个元素时,我遇到了问题,我的list<> mayor
它的值会像list<> menor
那样改变,这里是代码。谢谢。
List<string[]> listas(List<string[]> mayor, List<string[]> menor)
{
List<string[]> may = new List<string[]>(mayor);//here i clone the list mayor
List<string[]> men = new List<string[]>(menor);//here i clone the list menor
string[] var_aux = null; ;
for (int i = 0; i<mayor.Count;i++ )
{
if (men.Find(delegate(string[] s) { return s[0] == may.ElementAt(i)[0]; })==null)//here i find all similar elements
{
var_aux = new string[4];
var_aux = may.ElementAt(i);
var_aux[3] = "0";//here is where i change de element[3]
men.Add(var_aux);//and here is where the element changed in men, alter the elements in may how can i avoid this?
}
}
men.Sort((s, t) => String.Compare(s[0], t[0]));
return men;
}
答案 0 :(得分:2)
此:
var_aux = new string[4];
从未使用过,因为以下几行用may
中对数组的引用替换它:
var_aux = may.ElementAt(i);
然后修改此数组的内容:
var_aux[3] = "0";
var_aux
与may
中存在的数组相同。如果需要副本,则需要克隆数组,例如:
var_aux = may.ElementAt(i).ToArray();