###前提・実現したいこと
C#で関数の引数に配列を渡した場合、参照型になってしまうのですが
値型として渡して関数内で配列の要素を変更しても元の配列には影響がないようにするというのは不可能でしょうか?
###発生している問題・エラーメッセージ
下記のソースコードのように array関数にs配列を渡したら関数内でa配列を変更すると元のs配列が{0,1,2}から{3,1,2}に変わってしまう
###該当のソースコード
c#
1using System; 2 3class Untitled 4{ 5 static void Main(string[] args) 6 { 7 int[] s = {0,1,2}; 8 array(s); 9 Console.WriteLine(s[0]+" "+s[1]+" "+s[2]); 10 } 11 12 static void array(int[] a) 13 { 14 a[0] = 3; 15 Console.WriteLine(a[0]+" "+a[1]+" "+a[2]); 16 return; 17 } 18} 19//**実行結果** 20//3 1 2 21//3 1 2
###試したこと
下記のコードのように一時的な配列を作ってコピーすれば元の配列が変わってしまうことを防ぐことができましたが
もう少しスマートな方法がないのでしょうか?もし、ご存知でしたら教えてください
C#
1using System; 2 3class Untitled 4{ 5 static void Main(string[] args) 6 { 7 int[] s = {0,1,2}; 8 array(s); 9 Console.WriteLine(s[0]+" "+s[1]+" "+s[2]); 10 } 11 12 static void array(int[] a) 13 { 14 **int[] tmp = new int[a.Length];** 15 **a.CopyTo(tmp,0);** 16 tmp[0] = 3; 17 Console.WriteLine(tmp[0]+" "+tmp[1]+" "+tmp[2]); 18 return; 19 } 20} 21//**実行結果** 22//3 1 2 23//0 1 2

回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。