C# 转换IQueryable的扩展方法<;T>;和IEnumerable<;T>;只读集合<;T>;

C# 转换IQueryable的扩展方法<;T>;和IEnumerable<;T>;只读集合<;T>;,c#,linq-to-sql,extension-methods,ienumerable,iqueryable,C#,Linq To Sql,Extension Methods,Ienumerable,Iqueryable,如何编写扩展方法,将IQueryable和IEnumerable转换为ReadOnlyCollection 谢谢列表已经包含扩展方法AsReadOnly(),所以只需执行以下操作: queryable.ToList().AsReadOnly() List已经包含扩展方法AsReadOnly(),所以只需执行以下操作: queryable.ToList().AsReadOnly() publicstaticreadonlycollection作为ReadOnlyCollection(此IEnu

如何编写扩展方法,将
IQueryable
IEnumerable
转换为
ReadOnlyCollection

谢谢

列表
已经包含扩展方法
AsReadOnly()
,所以只需执行以下操作:

queryable.ToList().AsReadOnly()
List
已经包含扩展方法
AsReadOnly()
,所以只需执行以下操作:

queryable.ToList().AsReadOnly()
publicstaticreadonlycollection作为ReadOnlyCollection(此IEnumerable源代码)
{
if(source==null)
抛出新的ArgumentNulLException(“源”);
IList list=源作为IList??source.ToList();
返回新的只读集合(列表);
}
请注意,在这种情况下(与LINQ堆栈中的所有其他方法一样),没有“转换”IEnumerable这样的事情,您将返回与以前不同的对象。

public static ReadOnlyCollection as ReadOnlyCollection(此IEnumerable源代码)
{
if(source==null)
抛出新的ArgumentNulLException(“源”);
IList list=源作为IList??source.ToList();
返回新的只读集合(列表);
}

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

源代码为IList??source.ToList()?哦,当然。我通常使用聚合运算符,因为我不是很自然地使用它(不是因为我不理解它)。对不起,在方法体中忘记了泛型类型参数。@Nima,扩展方法只能放在静态类中请注意,返回的集合的行为不同,这取决于传递的
IEnumerable
是否已经是
IList
。如果是,则该源集合的任何未来突变都将反映在您的
只读集合中
;如果不是,则您的
ReadOnlyCollection
实际上是不可变的。危险的建筑。坚持一个。
源代码为IList??source.ToList()?哦,当然。我通常使用聚合运算符,因为我不是很自然地使用它(不是因为我不理解它)。对不起,在方法体中忘记了泛型类型参数。@Nima,扩展方法只能放在静态类中请注意,返回的集合的行为不同,这取决于传递的
IEnumerable
是否已经是
IList
。如果是,则该源集合的任何未来突变都将反映在您的
只读集合中
;如果不是,则您的
ReadOnlyCollection
实际上是不可变的。危险的建筑。坚持一个。