Методы расширения для преобразования IQueryable <T>и IEnumerable <T>в ReadOnlyCollection <T> - PullRequest
1 голос
/ 02 апреля 2011

Как написать методы расширения для преобразования IQueryable<T> и IEnumerable<T> в ReadOnlyCollection<T>?

Спасибо

Ответы [ 2 ]

7 голосов
/ 02 апреля 2011

List<T> уже содержит метод расширения AsReadOnly(), поэтому просто сделайте что-то вроде:

queryable.ToList().AsReadOnly()
1 голос
/ 02 апреля 2011
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);
}

Обратите внимание, что в этом случае не существует такой вещи, как "преобразование" IEnumerable<T> (как со всеми другими методами в стеке LINQ), вы получите объект, отличный от предыдущего.

...