2010-09-08 3 views
-1
public class MyClass<T> 
{ 
     public T this[int index] 
     { 
      get 
      { 
       ... 
      } 
      set 
      { 
       ... 
      } 
     } 

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

Код не будет компилироваться из-за утверждения в MyMethod(). Есть ли другой способ вызова индексатора?Вызывающий индексатор из той же категории (0)

Edit: Модифицированный MyMethod()

Edit2: Ошибка компиляции

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

Спасибо.

+0

Где 'index' определен в' MyMethod'? – Larsenal

+1

Если я заменил MyMethod на «public void MyMethod (int index)», то пример компилируется отлично. –

+0

Код, который вы отправили, выглядит отлично. Можете ли вы опубликовать более «MyMethod»? – Larsenal

ответ

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, но я предполагаю, что вы желая получить индекс от где-то ... если это не то, что вы имели в виду, пожалуйста, уточните.

0

Вы не передаете значение для индекса в метод MyMethod - можете ли вы разместить немного больше кода? Похоже, что-то не хватает ...

1

Вызов индексатора в порядке, но он не знает, какой индекс вы хотите. Если вы укажете параметр MyMethod, он будет работать нормально.

Если вы пытаетесь получить текущий индекс или что-то в этом роде, вам необходимо сохранить приватную переменную, подключить его в своем индексе и получить доступ к этому.

отредактированный код компилируется нормально ...

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

     public void MyMethod() 
     { 
      int middleIndex = ...;    
      T value = this[middleIndex ];  
      ...    
     }   
} 
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]; 
    } 
} 
0

Ваш код обижая здесь:

public void MyMethod<T>() 

Ваш класс MyClass<T> уже есть общий параметр типа T, поэтому общий <T> на MyMethod не требуется

+0

Это оскорбительно, потому что вы объявляете новый T, и он не имеет никакого отношения к внешнему T. – sisve

Смежные вопросы