我有一个包含以下2个字段的类:
private readonly Memory<byte> data;
public Memory<byte> Reserved1 => data.Slice(0, 2);
ReSharper用Slice
给我警告:值为值类型的只读字段调用了不纯方法
从数据声明中删除readonly
可以修复警告,但是我想了解在这种情况下此警告是否为误报或警告是否有效,因此我应该避免设置data
readonly
。有什么建议吗?
答案 0 :(得分:1)
如果我理解正确,
Memory<T>
始终是只读结构,并且其字段是不可变的。尽管它指向的内存不是。
切片上的突变将反映在它指向data
中的内存中,这是我假设您想要的。使用
// ReSharper disable once ImpureMethodCallOnReadonlyValueField
还有一个相对著名的问题,由 Jon Skeet 和 Eric Lippert 回答,他们讨论了不纯方法及其对结构的影响