1

インデックス プロパティがあるという事実に基づいてオブジェクトをパラメータ化する方法はありますか?

public void LoopThroughIndexer(IndexEnabledClass parameter)
{
    object value1 = parameter[1]
    object value2 = parameter[2]
    //Do stuff with value1 and value2
}

よろしくお願いします!

編集 1: 関心をお寄せいただきありがとうございます。物事を明確にするために、 parameteriseによって、メソッドの引数として作成することを意味します。私の例でparameterは、広義のタイプIndexEnabledClassです。私の質問は、何かがIndexEnabledClass存在するかということです。

答えはノーのようですが、使用できますIEnumerable<E>

4

2 に答える 2

2

それを行うための組み込みの方法はないと思います。しかし、いくつかのバリエーションについて考えることができます。

ジェネリック インターフェイスを定義します。

public interface IIndexer<T, U>
{
    T this[U index] { get; set; }
}

必要に応じて実装します (以下は単なる例です)。

public class SomeClass : IIndexer<SomeClass, int>
{
    public SomeClass this[int index]
    {
        get
        {
            //...
        }
        set
        {
            //...
        }
    }
}

intがインデックスであると仮定して、メソッドを作成します。

public static void DoSomething<T>(IIndexer<T, int> obj)
{
    for (int i = 0; i < 5; i++)
    {
        T o = obj[i];
        // do what you need
    }
}

そして、次の方法を使用します。

SomeClass sc = new SomeClass();
DoSomething(sc);
于 2012-12-18T05:19:09.513 に答える
-1

IndexEnabledClass(FCLに)のようなものはないようです。ただし、自分で実装することはできます。

C# インデクサーを使用できます。

// Indexer declaration. 
public int this[int index]
{
    // get and set accessors
}
于 2012-12-18T05:03:54.530 に答える