我写了一个方法
public List<List<object>> Fetch(string data),在我创建的内部
List<List<object>> p = new List<List<object>>();
我的老板现在想要返回一个IList<IList<object>>而不是List<List<object>>ie
public IList<IList<object>> Fetch(string data),
所以当我尝试的时候
return (IList<IList<object>>) p; //throws an exception
我如何转换
List<List<object>>为IList<IList<object>> 和返回List<List<object>>
谢谢.
Jon*_*eet 60
您不能通过直接铸造执行转换 - 这不安全.相反,你应该使用:
IList<IList<object>> ret = new List<IList<object>>();
Run Code Online (Sandbox Code Playgroud)
然后,对于每个"子列表",您可以使用:
// Or whatever
ret.Add(new List<object>());
Run Code Online (Sandbox Code Playgroud)
最后,回来吧ret.
你可以使用LINQ来执行现有的转换List<List<object>>,当您返回它-但它会更好,只是创造一个更加合适的类型入手,如上图所示.
要理解为什么某些现有答案是错误的,假设您可以这样做:
IList<IList<object>> p = new List<List<object>>();
Run Code Online (Sandbox Code Playgroud)
那么这将是有效的:
List<List<object>> listOfLists = new List<List<object>>();
IList<IList<object>> p = listOfLists;
p.Add(new object[]);
List<object> list = p[0];
Run Code Online (Sandbox Code Playgroud)
但是p[0]是对a的引用object[],而不是List<object>...我们所谓的类型安全代码看起来不再安全......
幸运的是,IList<T>是不变的,以防止这个问题.
您必须将列表声明为
IList<IList<object>> list = new List<IList<object>>(); // Works!
Run Code Online (Sandbox Code Playgroud)
这是有效的,因为首先只创建了外部列表。然后,您可以插入与 兼容的单个项目IList<object>:
list.Add(new List<object>());
list.Add(new object[10]);
Run Code Online (Sandbox Code Playgroud)
var myOriginalList = new List<List<Object>>();
var converted = ((IList<IList<Object>>)myOriginalList.Cast<IList<Object>>().ToList()); // EDIT: Added .ToList() here
Run Code Online (Sandbox Code Playgroud)
您不需要转换回来 - 您可以做任何IList您可以做的事情List。
| 归档时间: |
|
| 查看次数: |
37069 次 |
| 最近记录: |