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
也提供纯维数组)
是不是[]是[,]
不可以。Abyte[][]
是一个数组数组。“外部”数组的每个元素都是对正常字节[]
的引用(当然也可以是空引用)
一个字节[,]
是一个-单个对象
矩形数组不实现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);