分類:[C#] 
 
 開発環境:Visual Studio 2010
リストに要素を追加する際,追加するのに使用した変数の値が変化すると,追加先の値まで変わってしまって困っています.
以下に載せているソースコードでは,
explain()においてはtemp_explainの値が変化しても追加先への影響はないです.
page_explain[0][0].startは500
page_explain[0][1].startは2000
しかし,data()においてはpage_Data[0]の値が変化すると追加先も変化してしまいます.
tab_Data[0][0].startは100
tab_Data[0][1].startは100
どうしてこうなるのかわかりません.
data()においても,追加に使用した変数の値が変更しても影響されないようにしたいのですが,どうすればいいでしょうか.
page_Dataは追加するときのみに使用し,使いまわしたいのです.
どうぞ,よろしくお願いします.
class Program
    {
        public struct Data  
        {            
            public int end;
            public int start;         
        }
        public static Data[] page_Data = new Data[10];  //構造体配列
        public static List<Data[]> tab_Data = new List<Data[]>();      //構造体配列が要素になっているリスト 
        public struct Explain      
        {
            public int start;
            public int end;      
        }
        public static Explain temp_explain;     //構造体
        public static List<Explain>[] page_explain = new List<Explain>[10]; //構造体のリストが配列になっている 
        public static List<List<Explain>[]> tab_explain = new List<List<Explain>[]>();
        static void Main(string[] args)
        {
            for (int i = 0; i < 10; i++)
            {                
                page_explain[i] = new List<Explain>();
            }
            explain();
            data();
        }
        static void data()
        {           
            page_Data[0].start = 1;
            page_Data[0].end = 5;
            tab_Data.Add(page_Data);
            page_Data[0].start = 100;
            page_Data[0].end = 500;
            tab_Data.Add(page_Data);            
        }
        static void explain()
        {
            temp_explain.start = 500;
            temp_explain.end = 1000;
            page_explain[0].Add(temp_explain);
            temp_explain.start = 2000;
            temp_explain.end = 3000;
            page_explain[0].Add(temp_explain);
            tab_explain.Add(page_explain);
        }
    }
  |