【问题标题】:Calling indexer from within the same (generic) class从同一(通用)类中调用索引器
【发布时间】:2010-09-08 18:45:00
【问题描述】:
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]'

谢谢。

【问题讨论】:

  • indexMyMethod 中定义在哪里?
  • 如果我将 MyMethod 替换为“public void MyMethod(int index)”,则示例编译得非常好。
  • 您发布的代码看起来不错。你能多发些MyMethod吗?
  • 这种不愿编译是否表现在某种编译时错误、计算机崩溃、从天而降的苹果中,您想分享或者您希望我们读懂您的想法?
  • 你确定你的班级只有那个 T 吗?有没有机会,T 另一个类或MyMethod 通用?(如MyMethod&lt;T&gt;

标签: c# generics indexer


【解决方案1】:

对我来说很好用:

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

【讨论】:

    【解决方案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];
        }
    }
    

    【讨论】:

      【解决方案3】:

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

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

      您编辑的代码编译良好...

      public class MyClass<T>
      {
              public T this[int index]
              {
                  get
                  {
                      ...
                  }
                  set
                  {
                      ...
                  }
              }
      
              public void MyMethod()
              {   
                   int middleIndex = ...;              
                   T value = this[middleIndex ];     
                   ...             
              }           
      }
      

      【讨论】:

        【解决方案4】:

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

        【讨论】:

          【解决方案5】:

          您的违规代码在这里:

          public void MyMethod<T>()
          

          你的类MyClass&lt;T&gt;已经有一个泛型类型参数T,所以MyMethod上的泛型&lt;T&gt;是不必要的

          【讨论】:

          • 这是冒犯的,因为你声明了一个新的 T,它与外部的 T 无关。
          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2018-12-17
          • 2013-05-01
          • 1970-01-01
          • 2022-12-04
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多