rksoftware

Visual Studio とか C# とかが好きです

C# 2.0 以降の新機能の確認 - C# 7.2 - ref 条件式

C# 2.0 以降の新機能を一つづつ確認していきます。
以前に一度行ったのですが、公式ドキュメント再編でリンク切れしているところを見つけてしまったので。今ならもっと簡潔なサンプルが欠けるところもあるだろうし、せっかくなので今もう一度確認して行きます。

ref 条件式

 https://docs.microsoft.com/ja-jp/dotnet/csharp/language-reference/operators/conditional-operator#conditional-ref-expression
 三項演算子で参照(ref)を返せるようになった。

{ // 変数 a と c は同じなので、a への代入で c の出力も変わる
    var (a, b) = (10, 20);
    ref var c = ref (true ? ref a : ref b);
    (a, b) = (11, 21);
    Console.WriteLine($"a:{a} b:{b} c:{c}");    // a: 11 b: 21 c: 11 と出力される
}
{ // 変数 b と c は同じなので、b への代入で c の出力も変わる
    var (a, b) = (10, 20);
    ref var c = ref (false ? ref a : ref b);
    (a, b) = (11, 21);
    Console.WriteLine($"a:{a} b:{b} c:{c}");    // a: 12 b: 21 c: 21 と出力される
}
{ // 参照が返っているので、変数 a の値を直接変更できる
    var (a, b) = (10, 20);
    (true ? ref a : ref b) = 13;
    Console.WriteLine($"a:{a} b:{b}");    // a: 13 b: 20 と出力される
}
{ // 参照が返っているので、変数 b の値を直接変更できる
    var (a, b) = (10, 20);
    (false ? ref a : ref b) = 24;
    Console.WriteLine($"a:{a} b:{b}");    // a: 10 b: 24 と出力される
}