从同一(通用)类中调用索引器

时间:2010-09-08 18:45:00

标签: c# generics indexer

public class MyClass<T>
{
        public T this[int index]
        {
            get
            {
                ...
            }
            set
            {
                ...
            }
        }

        public void MyMethod<T>()
        {   
             int middleIndex = ...;              
             T value = this[middleIndex ];     
             ...             
        }           
}

由于MyMethod()中的语句,代码将无法编译。还有另一种调用索引器的方法吗?

编辑:修改了MyMethod()

Edit2:编译错误

Error    6    Cannot implicitly convert type 'T [C:\MyClass.cs]' to 'T [C:\MyClass.cs]'

感谢。

5 个答案:

答案 0 :(得分:3)

对我来说很好:

public class MyClass<T>
{
    public T this[int index]
    {
        get
        {
            return default(T);
        }
        set
        {
        }
    }

    public void MyMethod(int index)
    {                 
         T value = this[index];     
    }           
}

不可否认,我必须将index参数引入MyMethod,但我假设你想要从某处获取索引 ...如果那不是什么你的意思是,请澄清。

答案 1 :(得分:2)

这对我来说很好用:

public class MyClass<T>
{
    List<T> _items = new List<T>();

    public T this[int index]
    {
        get
        {
            return _items[index];
        }
    }

    public void MyMethod()
    {
        T value = this[2];
    }
}

答案 2 :(得分:1)

调用索引器很好,但它不知道你想要哪个索引。如果你将索引作为MyMethod的参数,它将正常工作。

如果您正在尝试获取当前索引或其他内容,则需要存储私有变量,将其连接到索引器中并访问它。

您编辑的代码编译得很好......

public class MyClass<T>
{
        public T this[int index]
        {
            get
            {
                ...
            }
            set
            {
                ...
            }
        }

        public void MyMethod()
        {   
             int middleIndex = ...;              
             T value = this[middleIndex ];     
             ...             
        }           
}

答案 3 :(得分:0)

您没有将索引的值传入方法MyMethod - 您可以发布更多代码吗?看起来有些东西不见了......

答案 4 :(得分:0)

您的违规代码在这里:

public void MyMethod<T>()

您的班级MyClass<T>已有一个通用类型参数T,因此<T>上的通用MyMethod是不必要的