rksoftware

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

C# 2.0 以降の新機能の確認 - C# 7.3 - 拡張可能な fixed ステートメント

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

拡張可能な fixed ステートメント

 https://docs.microsoft.com/ja-jp/dotnet/csharp/language-reference/keywords/fixed-statement
 GetPinnableReference という名前のメソッドを実装する型はピン留めできる。

struct Struct
{
    int[] _value;
    public Struct(int[] value) => _value = value;
    public ref int GetPinnableReference() => ref _value[0];
}

class Program
{
    unsafe static void Main()
    {
        // C# のバージョンを低く設定すると
        // エラー CS8107  機能 '拡張可能な fixed ステートメント' は C# X では使用できません。7.3 以上の言語バージョンをご使用ください。
        fixed (int* ptr = new Struct(new []{ 10, 20 }))
        {
            Console.WriteLine(ptr[0]);
            Console.WriteLine(ptr[1]);
        }
    }
}