Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/286.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/vim/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在Linq和维度数组中选择Many?_C#_.net_Arrays_Linq_.net 4.0 - Fatal编程技术网

C# 在Linq和维度数组中选择Many?

C# 在Linq和维度数组中选择Many?,c#,.net,arrays,linq,.net-4.0,C#,.net,Arrays,Linq,.net 4.0,此代码编译的原因: byte[][] my2DArray =new byte [][]{ new byte[] {1, 2}, new byte[] {3, 4}, }; var r = my2DArray.SelectMany(f=> f); 而这个不是: byte[,] my2DArray =new byte [2,2]{

此代码编译的原因:

byte[][] my2DArray =new  byte  [][]{  
                        new byte[] {1, 2},
                        new byte[] {3, 4},
                       };
 
  var r = my2DArray.SelectMany(f=> f);
而这个不是:

byte[,] my2DArray =new byte [2,2]{  
                                   {1, 2},
                                   {3, 4},
                                 };
 
   var r = my2DArray.SelectMany(f=> f);
是不是
[][]
[,]
一样

编辑 为什么我需要这个

我需要创建一个一维数组,以便将其发送到
GetArraySum

当然,我可以创建重载,但我想将多个dim转换为一个dim。(
GetArraySum
也提供纯维数组)

是不是[]是[,]

不可以。A
byte[][]
是一个数组数组。“外部”数组的每个元素都是对正常
字节[]
的引用(当然也可以是空引用)

一个
字节[,]
是一个-单个对象

矩形数组不实现
IEnumerable
,只实现非通用的
IEnumerable
,但您可以使用
Cast
将每个项强制转换为
字节:

byte[,] rectangular = ...;
var doubled = rectangular.Cast<byte>().Select(x => (byte) x * 2);
字节[,]矩形=。。。;
var double=矩形.Cast().Select(x=>(字节)x*2);
这只会将矩形数组视为一个字节序列,但它不是一个“子数组”序列,与处理锯齿状数组的方式不同。。。例如,您不能使用
Cast

就我个人而言,我很少使用这两种多维数组——你在这里想实现什么?也许有更好的办法

编辑:如果您只是尝试在矩形数组中求和,则很容易:

int sum = array.Cast<byte>().Sum(x => (int) x);
int-sum=array.Cast().sum(x=>(int)x);

毕竟,你并不真正关心事情是如何布置的——你只需要所有值的总和(假设我正确地解释了你的问题)。

这不会编译,因为
[,]
是多维数组,
[]
是数组的数组()


因此,您的第一个示例将返回数组,第二个示例-它很复杂,因为它是单个对象,所以他在Ienumerables中找不到其他对象…对吗?@RoyiNamir:不完全-问题是它只实现
IEnumerable
,而不是
IEnumerable
,而且肯定不是
IEnumerable
。谢谢。我不知道
[,]
是一个单一的对象,这是我的问题……再次感谢你。@RoyiNamir:因为
Sum
只在
IEnumerable
上工作,矩形数组只实现非泛型的
IEnumerable
接口。@Sipo:可能是矩形的,但无论如何,它都会被封装在
Board
类中,所以我可以提供我想要的任何功能。
int sum = array.Cast<byte>().Sum(x => (int) x);