带引用的列表不允许我继续

时间:2014-06-22 17:49:11

标签: c# list reference

我正在做一个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;

    }

1 个答案:

答案 0 :(得分:2)

此:

var_aux = new string[4];

从未使用过,因为以下几行用may中对数组的引用替换它:

var_aux = may.ElementAt(i);

然后修改此数组的内容:

var_aux[3] = "0";

var_auxmay中存在的数组相同。如果需要副本,则需要克隆数组,例如:

var_aux = may.ElementAt(i).ToArray();