こんにちは。お世話になってます。
Listの中身をを書き換える関数を作成したのですが、戻ってきたときに書き換えられていないようで困っています。
確認済みのこと
・書き換えの関数内では正常に書き換えられているが、
戻ったときに元のままである。
実際に書いたコード
不要な部分(Listの中身の取得など)は省いています。
C#
1static void Main(string[] args) 2 { 3 List<List<string>> lines = new List<List<string>>(); 4 //////(中略) 5 lines.Foreach(x => {Console.WriteLine(x);}); 6 //自作関数の呼び出し 7 Kakikae(lines); 8 lines.Foreach(x => {Console.WriteLine(x);}); //関数呼び出し前後で内容の変化がない 9} 10 11internal static void Kakikae(List<List<string>> lines) 12{ 13 lines.Foreach(item => 14 { 15 //書き換え内容(略) 16 }); 17}
関数内では変更が生きているのに返ってきたと単に元通りになります。
Listを関数で書き換えるのには新しく複製したリストを使って書き換えたものを戻り値にするなどすれば良いのでしょうか。
調べていて参照渡しや値渡しというもののせいだろうなと思ったのですが、
理解力不足、経験不足でどういうことなのか、そしてこれを解決するにはどうすればよいかが分かりませんでした。
現在の参照渡しと値渡しに対する理解度は以下です。
・参照渡しはデータのいる場所を渡してくれるもの。その場所の中身がコピーされて渡される。
・値渡しは値をそのまま渡しているもの。
・参照渡しをするにはrefを修飾子に就ける必要がある。
・Listはもとから参照を渡すのでrefは不要。
・Listを値渡しすることはできるのか????
というレベルです。
解説とアドバイスをお願いします。
回答2件
あなたの回答
tips
プレビュー