我刚刚注意到C#中的多维数组没有实现IEnumerable<T>
,但是实现了IEnumerable
。对于一维数组,这两个IEnumerable<T>
和IEnumerable
来实现。
为什么会有这种差异?如果是多维数组IEnumerable
,那么肯定也应该实现通用版本吗?我注意到这一点是因为我尝试对多维数组使用扩展方法,除非您使用Cast<T>
或类似方法,否则扩展方法将失败。所以我绝对可以看到使多维数组实现的参数IEnumerable<T>
。
为了澄清我的问题在代码中,我希望下面的代码打印true
的四倍,而它实际打印true
,false
,true
,true
:
int[] singleDimensionArray = new int[10];
int[,] multiDimensional = new int[10, 10];
Debug.WriteLine(singleDimensionArray is IEnumerable<int>);
Debug.WriteLine(multiDimensional is IEnumerable<int>);
Debug.WriteLine(singleDimensionArray is IEnumerable);
Debug.WriteLine(multiDimensional is IEnumerable);
multiDimensional
可隐式转换为非泛型类型System.Collections.IList
(仅因为System.Array
实现了该接口)。所以你可以说System.Collections.IList mdCast = multiDimensional;
。然后,mdCast
仅在运行时使用单参数索引器会失败。请参阅MSDN上的文档。注意异常类型ArgumentException
。真丑。