我有不编译的代码:
public struct MyStruct
{
private fixed uint myUints[32];
public uint[] MyUints
{
get
{
return this.myUints;
}
set
{
this.myUints = value;
}
}
}
现在,我知道为什么代码无法编译,但显然我正处于累得无法思考的地步,需要一些帮助来使我朝正确的方向发展。我已经有一段时间没有使用不安全的代码了,但是我很确定我需要做一个
Array.Copy
(或Buffer.BlockCopy
吗?)并返回该数组的副本,但是这些不接受我需要的参数。我忘了什么?谢谢。
最佳答案
使用fixed
缓冲区时,您必须在fixed
上下文中工作:
public unsafe struct MyStruct {
private fixed uint myUints[32];
public uint[] MyUints {
get {
uint[] array = new uint[32];
fixed (uint* p = myUints) {
for (int i = 0; i < 32; i++) {
array[i] = p[i];
}
}
return array;
}
set {
fixed (uint* p = myUints) {
for (int i = 0; i < 32; i++) {
p[i] = value[i];
}
}
}
}
}