1

有没有办法根据对象具有索引属性的事实来参数化对象?

示例

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

提前谢谢大家!

编辑 1: 感谢您的关注。为了澄清问题,通过参数化,我的意思是将其作为方法中的参数;在我的示例中,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# Indexers

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