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

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

Le code ne sera pas compilé en raison de l'instruction MyMethod(). Y a-t-il une autre façon d'appeler l'indexeur?Appel de l'indexeur à partir de la même classe (générique)

Edit: MyMethod Modifié()

Edit2: erreur de compilation

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

Merci.

+0

Où '' index' est-il défini dans 'MyMethod'? – Larsenal

+1

Si je remplace MyMethod par "public void MyMethod (int index)" l'exemple compile parfaitement bien. –

+0

Le code que vous avez posté semble bien. Pouvez-vous poster plus de «MyMethod»? – Larsenal

Répondre

3

fonctionne bien pour moi:

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

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

Il est vrai que je devais introduire le paramètre index dans MyMethod, mais je suppose que vous étiez désireux d'obtenir l'indice de quelque part ... si ce n'est pas ce vous vouliez dire, s'il vous plaît clarifier.

0

vous n'êtes pas passer une valeur de l'indice dans la méthode MyMethod - vous pouvez poster un peu plus de code? On dirait que quelque chose manque ...

1

L'appel de la indexeur est très bien, mais il ne sait pas quel index que vous voulez. Si vous faites de l'index un paramètre de MyMethod, cela fonctionnera très bien.

Si vous essayez d'obtenir l'indice actuel ou quelque chose, vous devez stocker une variable privée, câbler dans votre indexeur et avoir accès.

Votre code compile bien ... édité

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

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

Cela fonctionne bien pour moi:

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

Votre code incriminé est ici:

public void MyMethod<T>() 

Votre classe MyClass<T> a déjà un paramètre de type générique T, donc le générique <T> sur MyMethod est inutile

+0

C'est offensant parce que vous déclarez un nouveau T, et il n'a aucune relation avec le T extérieur. – sisve

Questions connexes