将IQueryable <t>和IEnumerable <t>转换为ReadOnlyCollection的扩展方法<t> </t> </t> </t>

时间:2011-04-02 10:41:47

标签: c# linq-to-sql extension-methods ienumerable iqueryable

如何编写用于将IQueryable<T>IEnumerable<T>转换为ReadOnlyCollection<T>的扩展程序?

由于

2 个答案:

答案 0 :(得分:7)

List<T>已包含扩展方法AsReadOnly(),因此请执行以下操作:

queryable.ToList().AsReadOnly()

答案 1 :(得分: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);
}

请注意,在这种情况下不存在“转换”IEnumerable<T>的事情(与LINQ堆栈中的所有其他方法一样),您将获得与以前不同的对象。