为什么进行层序遍历时会出现这个异常?
无法隐式转换类型 '
System.Collections.Generic.List<System.Collections.Generic.List<int>>
' 到 'System.Collections.Generic.IList<System.Collections.Generic.IList<int>>
'。存在显式转换 (是否缺少强制转换?)
public IList<IList<int>> LevelOrder(TreeNode root)
{
var result = new List<List<int>>();
var que = new Queue<TreeNode>();
//if(root==null) return result;
que.Enqueue(root);
while(que.Count!=0)
{
int n = que.Count;
var subList = new List<int>();
for(int i=0;i<n;i++)
{
if(que.Peek().left!=null)
que.Enqueue(que.Peek().left);
if(que.Peek().right!=null)
que.Enqueue(que.Peek().right);
subList.Add(que.Dequeue().val);
}
result.Add(subList);
}
return result;
}
return result as IList<IList<int>>
吗?或者明确指定结果的类型,例如IList<IList<int>> result = new List<List<int>>();
? - stuartdList
是一个IList
,可以安全地被视为任何一个。但是List<List>
和List<IList>
不能这样做,因为如果添加到列表中的任何内容不是List
,它就会破坏将其视为List<List>
的任何代码(它不再是List<List>
)。这是基本问题。协变和逆变。 - zzxyz