提问者:小点点

如何在C#中将ICollection<ICollection<Int>>转换为List<List<Int>>


有什么办法可以优雅地做到这一点吗? 我只需要用另一个数组ICollection>的值存储一个新变量list>,但是我找不到任何方法来实现这一点。

代码:

ICollection<ICollection<int>> mycollection = // instantiate with some numbers
List<List<int>> myList = myCollection;

共2个答案

匿名用户

我有一个用于解决这类问题的扩展方法,它首先尝试将集合强制转换为列表,以防止对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();