有什么办法可以优雅地做到这一点吗? 我只需要用另一个数组ICollection
的值存储一个新变量list
,但是我找不到任何方法来实现这一点。>
代码:
ICollection<ICollection<int>> mycollection = // instantiate with some numbers
List<List<int>> myList = myCollection;
我有一个用于解决这类问题的扩展方法,它首先尝试将集合强制转换为列表,以防止对ToList
的过时调用:
public static List<T> SafeToList<T>(this IEnumerable<T> source)
{
var list = source as List<T>;
return list ?? source.ToList();
}
现在您可以使用以下内容:
var result = myCollectionOfCollections.Select(x => x.SafeToList()).SafeToList();
如果您的集合可能是数组,并且您不关注作为方法结果的list
,则也可以使用更通用的接口ilist
:
public static IList<T> SafeToList<T>(this IEnumerable<T> source)
{
var list = source as List<T>;
var array = source as T[];
return list ?? array ?? source.ToList();
}
或者作为一行:
public static IList<T> SafeToList<T>(this IEnumerable<T> source)
=> source as List<T> ?? source as T[] ?? (IList<T>) source.ToList();
您可以使用LINQ:
ICollection<ICollection<int>> data = ...;
var converted = data.Select(c => c.ToList()).ToList();