2010-07-12 5 views
2

J'ai une méthode générique (dans une classe non générique) renvoyant des éléments.convertir une méthode en getter

public IEnumerable<T> GetElements<T>() where T : class 
    { 
     foreach (Element element in elements) 
     { 
      if (element is T) 
      { 
       yield return element as T; 
      } 
     } 
    } 

Je veux transformer cette fonction dans un getter et essayé quelque chose comme

public IEnumerable<T> Elements<T> 
    { 
     get 
     { 
      foreach (Element element in elements) 
      { 
       if (element is T) 
       { 
        yield return element as T; 
       } 
      } 
     } 
    } 

Cela ne compile pas: (expected

Quelqu'un sait ce que le problème est ici?

merci

+1

Voir [Création d'une propriété générique] (http://stackoverflow.com/questions/271347/making-a-generic-property). Fondamentalement, vous ne pouvez pas avoir une propriété générique dans une classe non générique. –

Répondre

7

Les propriétés ne supportent pas les paramètres génériques. La seule façon de réaliser quelque chose comme ceci serait de fournir un paramètre de type générique au type d'encapsulation.

+1

Exactement. Fondamentalement, le compilateur lit la ligne 'public IEnumerable Elements ' et pense que parce qu'il y a un paramètre de type générique, il doit s'agir d'une méthode, puis cherche un '(', qu'il ne trouve pas bien sûr, parce que vous voulez que ce soit une propriété. – Noldorin

Questions connexes