代码片段1)无法编译,我需要例如使剪辑成为剪辑2) 如果我出于某种原因希望测试声明为原样。但是为什么编译器不能进行转换,例如剪辑的演员3)
1)
static IDictionary<int, IEnumerable<int>> DoStuff()
{
var test = new Dictionary<int, IList<int>>() { { 1, new List<int>() { 1, 2 } } };
return test;
}
2)
static IDictionary<int, IEnumerable<int>> DoStuff()
{
var test = new Dictionary<int, IList<int>>() { { 1, new List<int>() { 1, 2 } } };
return test.ToDictionary(item => item.Key, item => (IEnumerable<int>)item.Value);
}
3)
static IEnumerable<int> DoStuff()
{
var test = new List<int>() { 1, 2 };
return test;
}
答案 0 :(得分:3)
这是因为IDictionary<int, IList<int>>
没有继承/实施IDictionary<int, IEnumerable<int>>
您的第一个示例可以更改为此并且应该有效:
static IDictionary<int, IEnumerable<int>> DoStuff()
{
var test = new Dictionary<int, IEnumerable<int>>() { { 1, new List<int>() { 1, 2 } } };
return test;
}
答案 1 :(得分:3)
Variance,但在您的情况下,netiher IDictionary&lt;&gt;也不是IList&lt;&gt;是变体类型,因此无法自动转换为另一个IDictionary&lt;&gt;。