系统内存条不纯

时间:2019-03-10 03:13:40

标签: c# resharper

我有一个包含以下2个字段的类:

private readonly Memory<byte> data;
public Memory<byte> Reserved1 => data.Slice(0, 2);

ReSharper用Slice给我警告:值为值类型的只读字段调用了不纯方法

从数据声明中删除readonly可以修复警告,但是我想了解在这种情况下此警告是否为误报或警告是否有效,因此我应该避免设置data readonly。有什么建议吗?

1 个答案:

答案 0 :(得分:1)

如果我理解正确,

Memory<T>始终是只读结构,并且其字段是不可变的。尽管它指向的内存不是。

切片上的突变将反映在它指向data中的内存中,这是我假设您想要的。使用

可以忽略这种情况下的警告
 // ReSharper disable once ImpureMethodCallOnReadonlyValueField

还有一个相对著名的问题,由 Jon Skeet Eric Lippert 回答,他们讨论了不纯方法及其对结构的影响

Impure method is called for readonly field