2022年3月6日日曜日

C#の基本でつまづく

 サイトから、階層にしたがって、ページを取得していくプログラムをつくっていたところ、しばらく悩んだ。
Url clink=new Url();
Url clink2=new Url();
foreach(Url ul in urlL)
{ clink=....;
  foreach(Url ul2 in urlL2   )
   {
      clink2=.....;
      //ここで、clinkとclink2をオブジェクトとするリスト作成
         currentDt.link1 = clink1;
         currentDt.link2 = clink2;
         lcdtmp.Add(currentDt);
   }
}

これだと、じつは、うまくいかない。
クラスは、参照型とみなすべきなので、
foreach(Url ul in urlL)
{ Url clink=new Url();
 clink=....;
  foreach(Url ul2 in urlL2   )
   {Url clink2=new Url();
      clink2=.....;
      //ここで、clinkとclink2をオブジェクトとするリスト作成
         currentDt.link1 = clink1;
         currentDt.link2 = clink2;
         lcdtmp.Add(currentDt);
   }
}
後者の場合であれば、問題なくlcdtmpが作成されるが
前者の場合は、Urlクラスは参照型なので、最後に代入されたclink1,clink2にすべてされてしまう。
クラスは参照型であるという基本的なことを忘れていたために犯したミスでした。

0 件のコメント:

コメントを投稿