これを試して
Sub Main
Dim outer As Integer = -1
Dim inner1 As Integer
Dim inner2 As Integer
Dim inner3 As Integer
Dim inner4 As Integer
inner1 = inner2 = inner3 = inner4 = outer
Console.WriteLine("{0},{1},{2},{3},{4}", inner1, inner2, inner3, inner4, outer)
End Sub
結果は
0,0,0,0,-1
したがって、C#のようにVB.NETでは機能しません
VB.NETとC#のILコードの違いを知りたいと思いました。
ILコードを見ると、VB.NETでサポートが不足している理由は明らかです。
VB.NETILコード
IL_0001: ldc.i4.m1
IL_0002: stloc.s 04
IL_0004: ldloc.1
IL_0005: ldloc.2
IL_0006: ceq
IL_0008: ldc.i4.0
IL_0009: cgt.un
IL_000B: neg
IL_000C: ldloc.3
IL_000D: ceq
IL_000F: ldc.i4.0
IL_0010: cgt.un
IL_0012: neg
IL_0013: ldloc.s 04
IL_0015: ceq
IL_0017: ldc.i4.0
IL_0018: cgt.un
IL_001A: neg
同等の例のC#ILコード
IL_0001: ldc.i4.m1
IL_0002: stloc.0
IL_0003: ldloc.0
IL_0004: dup
IL_0005: stloc.s 04
IL_0007: dup
IL_0008: stloc.3
IL_0009: dup
IL_000A: stloc.2
IL_000B: stloc.1
VBバージョンは値の比較を続けるため、問題はVB.NETでは二重の意味を持つ=演算子です。この場合、割り当てるのではなく比較するために使用されます。