将IList转换为IEnumerable

时间:2010-12-16 13:59:35

标签: c#

代码片段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;
}

2 个答案:

答案 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)

.NET 4支持

Variance,但在您的情况下,netiher IDictionary&lt;&gt;也不是IList&lt;&gt;是变体类型,因此无法自动转换为另一个IDictionary&lt;&gt;。