2010-12-12 26 views
2

Pourquoi est-il pas autorisé à utiliser IEnumerable<T> comme un type pour une propriété dans une classe par exemple quelque chose commeIEnumerable <T> question

public class Example 
{ 
    public IEnumerable<Int32> Ids {get; private set;} 
    publicIEnumerable<string> Names {get; private set;} 
} 

Désolé le problème n'a pas été qu'il n'a pas été compilait, j'ai raté le accesseurs publics sur l'écriture des choses ici, la question était pourquoi ne pas utiliser IEnumerable pour une propriété. Mais comme je l'ai lu plus loin, je me suis rendu compte que si nous avions seulement besoin de quelque chose pour itérer et ne pas modifier (ajouter, supprimer) que cela (en utilisant IEnumerable) est parfaitement acceptable.

+5

Qui dit qu'il pas bien? –

+0

pense stylecop se plaint à ce sujet. Moi aussi je ne sais pas pourquoi – devrooms

+4

Si vous avez une question "pourquoi ne compile pas", vous pouvez au moins inclure l'erreur du compilateur. –

Répondre

13

Le problème est que l'accessibilité par défaut des membres dans les classes est déjà privée, de sorte que votre code est équivalent à:

public class Example 
{ 
    private IEnumerable<int> Ids {get; private set;} 
    private IEnumerable<string> Names {get; private set;} 
} 

Cela ne peut pas compiler parce que lorsque vous incluez un modificateur d'accès supplémentaire pour un getter ou setter , il doit être plus restrictif que l'accès global de la propriété. Ce n'est pas dans ce cas.

Si vous faites la propriété publique globale cependant, il compilera sans problème:

public class Example 
{ 
    public IEnumerable<int> Ids {get; private set;} 
    public IEnumerable<string> Names {get; private set;} 
} 

(Cela suppose que vous avez une directive à l'aide de l'espace de noms System.Collections.Generic, bien sûr.)