JetBrains Rider 2026.1 Help

コードインスペクション: 冗長固定ポインター宣言

固定サイズのバッファフィールドは、C スタイルのインライン配列を表す安全でないコンテキストで使用可能な構造体メンバーです。 このようなフィールドは、主にネイティブコードとの相互運用に使用されます。

C# 7.3 が GC によって移動可能なメモリ内に存在する可能性がある固定サイズバッファの要素にアクセスする前は、 fixed ステートメントでバッファを固定した後にのみ許可されていました。

public unsafe struct MyBufferWrapper { public fixed byte Buffer[4]; public int Foo() => Buffer[0] + Buffer[1] + Buffer[2] + Buffer[3]; // error before C# 7.3 public int Bar() { fixed (byte* ptr = Buffer) { return ptr[0] + ptr[1] + ptr[2] + ptr[3]; // ok } } }

バッファのアドレスがスタッシュでない限り、索引付けが常に安全であるため、補助固定ポインタ宣言を導入するという要件は、その要素にアクセスするために固定サイズバッファを使用する場合には不当です。

C# 7.3 は、移動可能な固定サイズバッファのインデックス作成に対する不要な制限を取り除き、それらの使用をより自然なものにしました。

public unsafe struct MyBufferWrapper { public fixed byte Buffer[4]; public int Foo() => Buffer[0] + Buffer[1] + Buffer[2] + Buffer[3]; // ok since C# 7.3 public int Bar() { byte* ptr = Buffer; // error: taking address of the fixed size buffer still requires pinning return ptr[0] + ptr[1] + ptr[2] + ptr[3]; } }

JetBrains Rider は、 fixed ステートメントの使用が不要な箇所を検出し、冗長な固定ポインター宣言を削除するクイックフィックスを提供します。

2026 年 6 月 12 日