c# – 将嵌套列表转换为嵌套列表

我知道可以将一个项目列表从一种类型转换为另一种类型,但是如何将嵌套列表转换为嵌套List.

已经尝试过的解决方案

List<List<String>> new_list = new List<List<string>>(abc.Cast<List<String>>());

List<List<String>> new_list = abc.Cast<List<String>>().ToList();

这两个都给出以下错误:

Unable to cast object of type
‘System.Collections.Generic.List1[System.Int32]' to type
'System.Collections.Generic.List
1[System.String]’.

解决方法:

您可以使用Select()而不是这种方式:

List<List<String>> new_list = abc.Select(x => x.Select(y=> y.ToString()).ToList()).ToList();

此异常的原因:Cast将抛出InvalidCastException,因为它尝试转换List< int>对象,然后将其强制转换为List< string>:

List<int> myListInt = new List<int> { 5,4};
object myObject = myListInt;
List<string> myListString = (List<string>)myObject; // Exception will be thrown here

所以,这是不可能的.甚至,你也不能将int转换成字符串.

int myInt = 11;
object myObject = myInt;
string myString = (string)myObject; // Exception will be thrown here

此异常的原因是,盒装值只能拆分为完全相同类型的变量.

附加信息:

如果您感兴趣,这是Cast<TResult>(this IEnumerable source)方法的实现:

public static IEnumerable<TResult> Cast<TResult>(this IEnumerable source) {
    IEnumerable<TResult> typedSource = source as IEnumerable<TResult>;
    if (typedSource != null) return typedSource;
    if (source == null) throw Error.ArgumentNull("source");
    return CastIterator<TResult>(source);
}

如您所见,它返回CastIterator:

static IEnumerable<TResult> CastIterator<TResult>(IEnumerable source) {
    foreach (object obj in source) yield return (TResult)obj;
}

看看上面的代码.它将使用foreach循环遍历源代码,并将所有项目转换为object,然后转换为(TResult).

上一篇:SSM框架


下一篇:《BakerDAO系统升级方案V1.0》开发计划和系统设计