回答編集履歴

3

修正

2022/06/09 03:58

投稿

ozwk
ozwk

スコア13532

test CHANGED
@@ -1,7 +1,5 @@
1
- ラムダ式で外部変数、質問では`i`を参照するとき、変数`i`の値を参照しているのではなく、変数`i`自体を参照します。forで作ったラムダ式がすべて同じ変数`i`を参照しているので、全部同じ値になります
1
+ ラムダ式で外部変数、質問では`i`を参照するとき、変数`i`の値を参照しているのではなく、変数`i`自体を参照します。
2
-
3
-
4
- 例えば
2
+ 例えば以下のコードでは`message`の値を変えると出力も追従して変わります。
5
3
  ```C#
6
4
  public static void Main(){
7
5
  var message = "hoge";
@@ -16,4 +14,7 @@
16
14
  }
17
15
  ```
18
16
 
17
+ これが理由で、質問文のコードではforで作ったラムダ式がすべて同じ変数`i`を参照しているので、全部同じ値になります
18
+
19
+
19
20
  なお、Unityじゃない素のC#でも発生します。

2

修正

2022/06/09 03:57

投稿

ozwk
ozwk

スコア13532

test CHANGED
@@ -1,5 +1,7 @@
1
- ラムダ式で外部変数、ここでは`i`を参照するとき、変数`i`の値を参照しているのではなく、変数`i`自体を参照します。forで作ったラムダ式がすべて同じ変数`i`を参照しているので、全部同じ値になります
1
+ ラムダ式で外部変数、質問では`i`を参照するとき、変数`i`の値を参照しているのではなく、変数`i`自体を参照します。forで作ったラムダ式がすべて同じ変数`i`を参照しているので、全部同じ値になります
2
2
 
3
+
4
+ 例えば
3
5
  ```C#
4
6
  public static void Main(){
5
7
  var message = "hoge";

1

コード追加

2022/06/09 03:56

投稿

ozwk
ozwk

スコア13532

test CHANGED
@@ -1,3 +1,17 @@
1
1
  ラムダ式で外部変数、ここでは`i`を参照するとき、変数`i`の値を参照しているのではなく、変数`i`自体を参照します。forで作ったラムダ式がすべて同じ変数`i`を参照しているので、全部同じ値になります
2
2
 
3
+ ```C#
4
+ public static void Main(){
5
+ var message = "hoge";
6
+ Action f = () => System.Console.WriteLine(message);
7
+ f(); // hoge
8
+
9
+ message = "piyo";
10
+ f(); // piyo
11
+
12
+ message = "fuga";
13
+ f(); // fuga
14
+ }
15
+ ```
16
+
3
17
  なお、Unityじゃない素のC#でも発生します。