Fit*_*Dev 5 c# struct unsafe c#-7.2
随着 C# 7.2 的发布,现在可以使用readonly结构体,这在许多情况下可以提高性能。
对于我的结构之一,我使用固定大小的字节数组来实际保存数据。但是,当我标记struct和 字节数组字段时readonly,C# 编译器抱怨readonly该字段无效。为什么我不能在一个字段上同时拥有fixed和?readonlystruct
readonly unsafe struct MyStruct {
readonly fixed byte _Value[6]; //The modifier 'readonly' is not valid for this item.
}
Run Code Online (Sandbox Code Playgroud)
因为 C# 规范是这么说的(而且总是这么说,甚至在 c# 7.2 之前也是如此)。fixed在名为“固定大小缓冲区声明”的 18.7.1 节中,缓冲区声明中允许使用以下修饰符:
新的
民众
受保护的
内部的
私人的
不安全
没有readonly这里。如果您考虑一下 - 无论如何它都没有多大意义,因为固定缓冲区大小由指针表示,并且您不能限制对指针的写访问。例如:
var s = new MyStruct();
byte* value = s._Value;
// how can you prevent writing to `byte*`?
Run Code Online (Sandbox Code Playgroud)