2

私のタイトルが明確であるか具体的であるかはわかりませんが、これが私がやろうとしていることです。

新しいクラスがあります

public class Segments
    {            
        public List<double> List1 { get; set; }
        public List<double> List2 { get; set; } 
        public List<double> List3 { get; set; } 
        public List<double> List4 { get; set; } 
    }

public static void SplitSegments(CsvClass longList, List<Segments> segments)
    {
        Segments tempSegments = new Segments();
        List<double> list1 = new List<double>();
        List<double> list2 = new List<double>();
        List<double> list3 = new List<double>();
        List<double> list4 = new List<double>();

        // Nested For loop that goes through a longList with its own properties.
        // Below is a flag for when to split that longList.properties into segments

        if (flag == true)
        {
             //The lists are now complete for the first segment.
             list1.Add(longList.one[i]);
             list2.Add(longList.two[i]);
             list3.Add(longList.three[i]);
             list4.Add(longList.four[i]);

             //created a copy of the class properties
             tempSegments.List1 = new List<double>(list1);
             tempSegments.List2 = new List<double>(list2);
             tempSegments.List3 = new List<double>(list3);
             tempSegments.List4 = new List<double>(list4);

             //Add to List<Segments>
             segments.Add(tempSegments)

             //Clear lists in order to move on to creating next segment of the longList.
             list1.Clear();
             list2.Clear();
             list3.Clear();
             list4.Clear();
             break;
        }
    }
}

私の問題は、新しいセグメントが作成されてに追加されるとList<Segments>、すべてのセグメントが新しいセグメントの同じ正確なコピーになることです。

クラス内のリストは、まだリストと同じオブジェクトを参照していると思います。私の質問は、新しいセグメントがに追加されたときにList<Segments>、古いセグメントが消去されないようにするにはどうすればよいですか?

4

2 に答える 2

2

行を移動する必要があります

Segments tempSegments = new Segments();

ループの本体に、おそらくif句内にif (flag == true)。これにより、反復ごとに新しいセグメントが作成されます。

コード全体は次のようになります。

    if (flag == true)
    {
         Segments tempSegments = new Segments();
         //The lists are now complete for the first segment.
         list1.Add(longList.one[i]);
         list2.Add(longList.two[i]);
         list3.Add(longList.three[i]);
         list4.Add(longList.four[i]);

         //created a copy of the class properties
         tempSegments.List1 = new List<double>(list1);
         tempSegments.List2 = new List<double>(list2);
         tempSegments.List3 = new List<double>(list3);
         tempSegments.List4 = new List<double>(list4);

         //Add to List<Segments>
         segments.Add(tempSegments)

         //Clear lists...
         list1.Clear();
         list2.Clear();
         list3.Clear();
         list4.Clear();
         break;
    }
于 2013-01-28T03:39:01.740 に答える
0
//created a copy of the class properties
tempSegments = new Segments();  // otherwise you are just changing the properties on a single obj and adding that obj many times to your list.
tempSegments.List1 = new List<double>(list1);
tempSegments.List2 = new List<double>(list2);
tempSegments.List3 = new List<double>(list3);
tempSegments.List4 = new List<double>(list4);
于 2013-01-28T03:41:33.280 に答える