转换IList <ilist <object>&gt;列出<list <object>&gt;形成

时间:2016-06-24 07:48:10

标签: c#

在以下代码response.Values中返回IList&gt;

 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

我该如何解决这个问题?

3 个答案:

答案 0 :(得分:5)

我不知道为什么你想要这样做,但有一种方法是:

var result = values.Select(v => v.ToList()).ToList();

但如果名单很大,这可能是一项昂贵的操作,而且我没有看到转换它的任何优势。 IList<object>提供您需要的功能 我能想到的唯一原因是你想把它传递给一个期望List<List<object>>作为参数类型的方法。

ToList()是类型为T的枚举的linq扩展,它返回包含枚举元素的List<T>Tobject例子)。

答案 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));
}

我没有测试过,但我认为它应该可行