为什么这个转换不隐式工作?
Why doesnt this cast work implicitly?
public IList<IList<string>> GetListOfLists()
{
var result = new List<List<string>>();
return result;
}
为什么List实现IList时return语句会抛出这个编译错误?
Cannot implicitly convert type 'System.Collections.Generic.List<System.Collections.Generic.List<string>>'
to 'System.Collections.Generic.IList<System.Collections.Generic.IList<string>>'
. An explicit conversion exists (are you missing a cast?) c:\ConsoleApplication1\Program.cs 18 20 ConsoleApplication1
最好的解决方法是什么?
您的转换将隐含地用于 List<T>
到 IList<T>
。但是,List<List<T>>
与 IList<IList<T>>
不协变,因为类型参数不同。
在不更改 return 类型的情况下,您可以做的最好的事情是
var result = new List<IList<string>>();
这对您的情况没有影响,因为 IList<string>
与 List<string>
改变了 returned 列表的类型,而不是内容。特别是,您当然可以添加 IList<string>
作为 result
.
的元素
为什么不用这个...
public List<List<string>> GetListOfLists()
{
var result = new List<List<string>>();
return result;
}
还是我遗漏了您需要的东西?
public IList<IList<string>> GetListOfLists()
{
var result = new List<List<string>>();
return result;
}
为什么List实现IList时return语句会抛出这个编译错误?
Cannot implicitly convert type
'System.Collections.Generic.List<System.Collections.Generic.List<string>>'
to'System.Collections.Generic.IList<System.Collections.Generic.IList<string>>'
. An explicit conversion exists (are you missing a cast?) c:\ConsoleApplication1\Program.cs 18 20 ConsoleApplication1
最好的解决方法是什么?
您的转换将隐含地用于 List<T>
到 IList<T>
。但是,List<List<T>>
与 IList<IList<T>>
不协变,因为类型参数不同。
在不更改 return 类型的情况下,您可以做的最好的事情是
var result = new List<IList<string>>();
这对您的情况没有影响,因为 IList<string>
与 List<string>
改变了 returned 列表的类型,而不是内容。特别是,您当然可以添加 IList<string>
作为 result
.
为什么不用这个...
public List<List<string>> GetListOfLists()
{
var result = new List<List<string>>();
return result;
}
还是我遗漏了您需要的东西?