質問: "abc") strList[i].RemoveAt(i); } return; } ``` メモリに詳しくはないのですが、その1はList<>を新しく作っているような感じで、その2はList<>をそのまま返しているような気がします。 自分としては、「感じで」「気のせいで」というぐらいの知識なので、どうにも自信がありません。 (その2はrefは必要ないかもしれませんが、つまり引数で返すということを示したつもりです。) よろしくお願いします。
回答: > > 以下の2つのコードはメモリ使用に関して、どちらの方が効率(合理的)がいいのでしょうか? > > > メモリ使用の効率化云々の話はどちらも関係ないと思いますけど。 どういう違いがあるかと言うと: **List funcA(List strList)** 引数の渡し方は C# のメソッドのデフォルトの値渡し(別の入れ物に中身をコピーして渡す)。 引数の List は参照型なので渡すのはオブジェクト(インスタンス)を指すアドレス情報。値渡しなのでメソッド側で用意した別の入れ物 strList にアドレス情報をコピーして渡している。 つまり、呼び出し元の変数とメソッド側の変数の中身は同じアドレス情報即ち単一のオブジェクトを指している。 なので、メソッド側で変数が指すオブジェクトを変更すると、呼び出し元の変数が指すオブジェクトでも同じ結果となる。return するのは意味がない。 **void funcB(ref List strList)** 引数の渡し方は参照渡し(入れ物を中身ごと渡す)。 基本は上記と同じだが以下の点が異なる。 呼び出し側の入れ物とメソッドに渡された入れ物 strList は同じになるので、メソッド側で新しくオブジェクト(インスタンス)を生成してそれのアドレス情報を入れ物に代入すると、呼び出し元の入れ物の中身が指すオブジェクトも、メソッド側で生成した新しいオブジェクトになる。