我刚刚注意到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);
Run Code Online (Sandbox Code Playgroud) 为什么这段代码编译:
byte[][] my2DArray =new byte [][]{
new byte[] {1, 2},
new byte[] {3, 4},
};
var r = my2DArray.SelectMany(f=> f);
Run Code Online (Sandbox Code Playgroud)
而这一个不是:
byte[,] my2DArray =new byte [2,2]{
{1, 2},
{3, 4},
};
var r = my2DArray.SelectMany(f=> f);
Run Code Online (Sandbox Code Playgroud)
不[][]作为[,]?
为什么我需要那个?
我需要创建一个单维数组,以便将其发送到 GetArraySum
当然我可以创建重载,但我想将mutli dim转换成一个暗淡的.(GetArraySum也用于纯维数组).
void Main()
{
byte[][] my2DArray =new byte [][]{
new byte[] {1, 2},
new byte[] {3, 4},
};
var sum = GetArraySum(my2DArray.SelectMany(f=> f).ToArray());
}
int GetArraySum(byte [] ar)
{
return ar.Select(r=>(int)r).Sum();
}
Run Code Online (Sandbox Code Playgroud)