2011-04-02 3 views

Répondre

1
public static ReadOnlyCollection<T> AsReadOnlyCollection<T>(this IEnumerable<T> source) 
{ 
    if(source == null) 
     throw new ArgumentNulLException("source"); 

    IList<T> list = source as IList<T> ?? source.ToList(); 
    return new ReadOnlyCollection<T>(list); 
} 

Notez qu'il n'y a pas une telle chose comme "conversion" d'un IEnumerable<T> dans ce cas (comme avec toutes les autres méthodes dans la pile LINQ), vous récupérerez un objet différent qu'avant.

+0

'source comme IList ?? source.ToList(); '? – Snowbear

+0

Oh, bien sûr. Je fais généralement le tour de l'opérateur de coalescence car je ne viens pas naturellement à moi (pas que je ne le comprends pas). – Femaref

+1

désolé, oublié le paramètre de type générique dans le corps de la méthode. – Femaref

6

List<T> contient déjà une méthode d'extension AsReadOnly(), donc il suffit de faire quelque chose comme:

queryable.ToList().AsReadOnly() 
Questions connexes