После некоторых исследований с использованием рефлектора выясняется, что следующее представляет приемлемое (с точки зрения производительности) решение, поскольку C # компилирует оператор switch для целых чисел в оператор CIL switch, который реализован как jump-list ...то есть - геттер выполняет около 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.