回答編集履歴
3
修正
test
CHANGED
@@ -1,7 +1,5 @@
|
|
1
|
-
ラムダ式で外部変数、質問では`i`を参照するとき、変数`i`の値を参照しているのではなく、変数`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
修正
test
CHANGED
@@ -1,5 +1,7 @@
|
|
1
|
-
ラムダ式で外部変数、
|
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
コード追加
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#でも発生します。
|