我使用了一种结构来表示纯数据。其中一个字段是固定大小的缓冲区,如下所示。
[StructLayout(LayoutKind.Sequential, Pack=2)]
unsafe struct ImageDosHeader
{
...
private fixed ushort _e_res[4];
...
[Description("Reserved")]
[DisplayName("e_res[0]")]
public ushort e_res_0 { get { ... } set { ... } }
...
}
在get/set函数中,我尝试做了以下操作,但是出现了“编译器错误CS1666:您不能使用包含在未固定表达式中的固定大小缓冲区。请尝试使用fixed语句。”
return this._e_res[0];
然而,以下工作:
fixed (ImageDosHeader* p = &this)
return p->_e_res[0];
ImageDosHeader local = this;
return local._e_res[0];
我可以轻松地使用解决方法,但是我想知道为什么直接从这个固定大小的缓冲区访问是非法的。或者这是一个我应该报告的错误吗?
我正在使用.NET 2.0。