System.Memory Slice Impure

问题描述 投票:3回答:1

我有一个有这两个字段的类:

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

ReSharper给我一个Slice的警告:Impure方法被调用为值只读的字段

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

c# resharper
1个回答
1
投票

如果我理解正确,

Memory<T>无论如何都是一个只读结构,它的字段是不可变的。虽然它指向的记忆不是。

切片上的突变将反映在它指向data的内存中,这就是我假设你想要的。在这种情况下的警告可以忽略

 // ReSharper disable once ImpureMethodCallOnReadonlyValueField

Jon Skeet也回答了一个相对着名的问题,Eric Lippert谈论不纯的方法及其对结构的影响

Impure method is called for readonly field

© www.soinside.com 2019 - 2024. All rights reserved.