Fácil criação de propriedades que suportam indexação em C #

Em C # achopropriedades indexadas extremamente útil. Por exemplo:

var myObj = new MyClass();
myObj[42] = "hello"; 
Console.WriteLine(myObj[42]);

No entanto, tanto quanto eu sei, não há açúcar sintático para dar suporte a campos que são compatíveis com a indexação (corrija-me se estiver errado). Por exemplo:

var myObj = new MyClass();
myObj.field[42] = "hello"; 
Console.WriteLine(myObj.field[42]);

A razão pela qual eu preciso disso é que eu já estou usando a propriedade index na minha classe, mas tenhoGetNumX(), GetX()eSetX() funciona da seguinte maneira:

public int NumTargetSlots {  
    get { return _Maker.NumRefs; }  
}
public ReferenceTarget GetTarget(int n) {
    return ReferenceTarget.Create(_Maker.GetReference(n));
}
public void SetTarget(int n, ReferenceTarget rt) {
    _Maker.ReplaceReference(n, rt._Target, true);
}

Como você provavelmente pode ver, expor esses itens como uma propriedade de campo indexável faria mais sentido. Eu poderia escrever uma classe personalizada para conseguir isso toda vez que quiser o açúcar sintático, mas todo o código padrão parece desnecessário.

Então, eu escrevi uma classe personalizada para encapsular o padrão e facilitar a criação de propriedades que podem ser indexadas. Dessa forma, posso adicionar uma nova propriedade da seguinte maneira:

public IndexedProperty<ReferenceTarget> TargetArray  {
    get { 
       return new IndexedProperty<int, ReferenceTarget>(
           (int n) => GetTarget(n), 
           (int n, ReferenceTarget rt) => SetTarget(n, rt));
       }
}

O código para essa nova classe IndexedProperty é semelhante a:

public class IndexedProperty<IndexT, ValueT>
{
    Action<IndexT, ValueT> setAction;
    Func<IndexT, ValueT> getFunc;

    public IndexedProperty(Func<IndexT, ValueT> getFunc, Action<IndexT, ValueT> setAction)
    {
        this.getFunc = getFunc;
        this.setAction = setAction;
    }

    public ValueT this[IndexT i]
    {
        get {
            return getFunc(i);
        }
        set {
            setAction(i, value);
        }
    }
}

Então, minha pergunta é:existe uma maneira melhor de fazer tudo isso?

Bem, para ser específico, existe uma maneira mais idiomática em C # para criar uma propriedade de campo indexável e, se não, como eu poderia melhorar meuIndexedProperty&nbsp;classe?

EDITAR:&nbsp;Após mais pesquisas, Jon Skeet chama isso de "indexador nomeado"