ダリアメモ@ブログ

日々思ったことや自分用のメモも含めプログラムの技術を淡々と書いていきます

C#のクラスは参照型、構造体は値型

タイトル通りです。

クラスのインスタンスを別のクラスのインスタンスで代入したら
値がうまくいかなくてあれ?って思ったら、
C#のクラスは参照型なので代入したら別のクラスのインスタンスと共有されてしまったというわけですね。

参考にしたサイト:
ufcpp.net

なのでC++と違って構造体とクラスは全く別物みたいですね。
下手にいじられても困るし、構造体に乗り換えようかなと思って使ってみましたがまた罠が…。

構造体の要素にアクセスする際に、一回ローカルで構造体を作ってそこに代入していじる形にしないとコンパイルエラーが出るみたいですね。

List<myStruct> list = {…};
MyStruct ms = list[0];
ms.Name = "MyStruct42";
list[0] = ms;

参考にしたサイト:
https://msdn.microsoft.com/ja-jp/library/wydkhw2c.aspx

リファクタリングしてる最中だったので、これはこれでめんどくさいなと思って結局クラスを使うことにしました。
何かいい方法がないのだろうか…。