相关疑难解决方法(0)

为什么C#多维数组没有实现IEnumerable <T>?

我刚刚注意到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)

.net c# arrays multidimensional-array

64
推荐指数
3
解决办法
2万
查看次数

Linq中的SelectMany和维数组?

为什么这段代码编译:

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)

.net c# linq arrays .net-4.0

3
推荐指数
1
解决办法
1789
查看次数

标签 统计

.net ×2

arrays ×2

c# ×2

.net-4.0 ×1

linq ×1

multidimensional-array ×1