我的解释代码有很大的问题,同时我做了两个循环功能,做同样的事情。我把我的代码发送给朋友,告诉我是否可以简化:)所以我得到类似的东西。
Array.Copy(
myImageData
.Select(
(b, index) =>
(
index > rooflimit && index < floorlimit && b == 252 &&
(myImageData[index + width] == 0 || (myImageData[index + width] > 168 && myImageData[index + width] < 173)) &&
myImageData[index - width] == 252 &&
myImageData[index - (2 * width)] == 159
) ? (byte)172 : b
).ToArray(),
rooflimit + 1,
myImageData,
rooflimit + 1,
floorlimit - rooflimit - 1
);
我的循环正在做类似的事情(上面做同样的事情):
我几乎得到了上面的代码,但是我不理解那个以:
开头的部分rooflimit + 1,
myImageData,
rooflimit + 1,
floorlimit - rooflimit - 1);
所以我请你帮忙,谢谢! PS。如果指定不好,请更改主题。
答案 0 :(得分:2)
最后四个参数是Array.Copy
的最后一个参数。如果将其拆分,您的代码会更清晰:
byte[] tmp = myImageData.Select([... big lambda expression ...])
.ToArray();
Array.Copy(tmp, rooflimit + 1,
myImageData, rooflimit + 1,
floorlimit - rooflimit - 1);
我也很想在这里使用一个单独的方法而不是一个lambda表达式 - 它太复杂了,不可读,真的。
答案 1 :(得分:1)
我认为最好先看MSDN Array.Copy:
从指定的范围开始复制Array中的一系列元素 源索引并将它们粘贴到另一个数组开始 指定的目标索引。指定长度和索引 作为32位整数。