这个不能退货:
new Dictionary<string, IList<object>>();
.. 但你可以返回这个:
new Dictionary<string, IEnumerable<object>>();
.. 或更改您的返回类型:
public Dictionary<string, IList<object>> GetProducts(){ ... }
这背后的部分原因:
想象一下,如果您可以将返回的字典作为Dictionary<string, IEnumerable<object>>,但将值作为List<object> 而不是IEnumerable<object>(其中List 是IEnumerable 的更具体类型)。
如果您随后尝试向其中添加新的IEnumerable<object>,那将是一个无效操作,因为您的元素实际上不是IEnumerable<object> 类型,而是List<object>。
被禁止的原因是List<object> 类型的元素可能(并且确实)包含IEnumerable<object> 不包含的方法。
想象一下将IEnumerable<object> 类型的元素添加到Dictionary<string, List<object>>。这意味着您可以在每个元素上调用List<object>-specific 方法直到您到达第一个IEnumerable<object>-元素,该方法不会被定义,因此抛出异常。
您的原始代码会导致编译时错误,从而阻止您遇到此类问题。
不久前我自己问过related question,这可能有助于更好地理解这一点。