0
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]'

谢谢。

4

5 回答 5

4

对我来说很好:

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,但我假设您想从某个地方获取索引...如果这不是您的意思,请澄清。

于 2010-09-08T18:48:01.250 回答
3

这对我来说很好:

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];
    }
}
于 2010-09-08T18:52:00.420 回答
1

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

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

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

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

        public void MyMethod()
        {   
             int middleIndex = ...;              
             T value = this[middleIndex ];     
             ...             
        }           
}
于 2010-09-08T18:51:25.203 回答
0

您没有将索引值传递给方法MyMethod- 您可以发布更多代码吗?好像少了点什么……

于 2010-09-08T18:49:49.660 回答
0

您的违规代码在这里:

public void MyMethod<T>()

你的类MyClass<T>已经有一个泛型类型参数 T,所以泛型<T>onMyMethod是不必要的

于 2010-09-09T05:15:53.837 回答