リフレクターを使用していくつかの調査を行った結果、C# は整数に対する switch ステートメントを CIL switch ステートメントにコンパイルし、ジャンプ リストとして実装されるため、以下が許容される (パフォーマンス上の) 解決策であることがわかりました... つまり、-ゲッターは約 11 の CIL 命令で実行されますが、これは問題ありません。
public struct EmbeddedArray<T>
{
private T _element0;
private T _element1;
private T _element2;
public int Length { get { return 3; } }
public T this[int index]
{
get
{
switch (index)
{
case 0:
return _element0;
case 1:
return _element1;
case 2:
return _element2;
}
throw new ArgumentOutOfRangeException("index");
}
}
}
以下のハンスのコメントをご覧ください。これは私が望んでいたほどのパフォーマンスではないことが判明しました... CIL がネイティブ マシン コードにコンパイルされると、測定されたパフォーマンスは .NET 配列がもたらすものとはかけ離れています。