在以下代码response.Values中返回IList>
IList<IList<object>> values = response.Values;
我想将values
转换为List<List<object>>
表单。我已经尝试使用以下语句
List<List<object>> values = response.Values as List<List<object>>
使用此声明后
values = null
但是
response.Values.Count = 82
我该如何解决这个问题?
答案 0 :(得分:5)
我不知道为什么你想要这样做,但有一种方法是:
var result = values.Select(v => v.ToList()).ToList();
但如果名单很大,这可能是一项昂贵的操作,而且我没有看到转换它的任何优势。 IList<object>
提供您需要的功能
我能想到的唯一原因是你想把它传递给一个期望List<List<object>>
作为参数类型的方法。
ToList()
是类型为T
的枚举的linq扩展,它返回包含枚举元素的List<T>
(T
为object
例子)。
答案 1 :(得分:1)
您可以通过以下方式以合理的效果执行此操作:
values.Cast<List<T>>().ToList();
这确实不遍历每个List<T>
的所有元素作为René Vogt's回答建议,并且性能增益非常明显。
更新。正如RenéVogt指出的那样,如果IList
类型对象的基础类型不是List
,而是实现IList
的其他类型,则会失败。在这种情况下,您将继续使用Select
并支付性能损失。
如果您 知道基础类型确实是List
,那么一定要使用Cast
更快。
答案 2 :(得分:0)
我认为您应该创建List列表然后在循环中填充它。像这样:
List<List<object>> list = new List<List<object>>();
foreach(IList<object> l in values){
list.Add(new List<object>(l));
}
我没有测试过,但我认为它应该可行