【发布时间】:2010-09-21 11:08:00
【问题描述】:
我刚刚注意到 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可以隐式转换为 non-generic 类型System.Collections.IList(仅仅是因为System.Array实现了该接口)。所以你可以说System.Collections.IList mdCast = multiDimensional;。然后在mdCast上使用单参数索引器只会在运行时失败。见doc on MSDN。请注意异常类型ArgumentException。真的很丑。
标签: c# .net arrays multidimensional-array