为什么这个演员不是隐含的?

时间:2016-03-12 02:36:12

标签: c# casting covariance generic-list

    public IList<IList<string>> GetListOfLists()
    {
        var result = new List<List<string>>();
        return result;
    }

为什么当List实现IList?

时,return语句会抛出此编译错误
  

无法将'System.Collections.Generic.List<System.Collections.Generic.List<string>>'类型隐式转换为'System.Collections.Generic.IList<System.Collections.Generic.IList<string>>'。存在显式转换(您是否缺少演员?)c:\ ConsoleApplication1 \ Program.cs 18 20 ConsoleApplication1

最佳解决方法是什么?

2 个答案:

答案 0 :(得分:1)

您的演员阵容会隐式使用setTranscribeCallback()List<T>。但是,IList<T>List<List<T>>不兼容,因为类型参数不同。

在不更改返回类型的情况下,您可以做的最好的事情是

IList<IList<T>>

在您的情况下没有任何区别,因为var result = new List<IList<string>>(); IList<string>会更改返回列表的类型,而不会更改内容。特别是,您当然可以添加List<string>作为IList<string>的元素。

答案 1 :(得分:-2)

为什么不使用这个......

public List<List<string>> GetListOfLists()
{
    var result = new List<List<string>>();
    return result;
}

或者我错过了你需要的东西?