System.Memory Slice Impure - PullRequest
       10

System.Memory Slice Impure

3 голосов
/ 10 марта 2019

У меня есть класс, который имеет эти 2 поля:

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

ReSharper выдает мне предупреждение с Slice: Вызван метод Impure для поля только для чтения типа значения

Удаление readonly из объявления данных исправляет предупреждение, но я хотел бы понять, является ли это предупреждение ложным срабатыванием в этой ситуации или если предупреждение действительно, и мне следует избегать установки data readonly. Любой совет?

1 Ответ

1 голос
/ 10 марта 2019

Если я правильно понимаю,

Memory<T> в любом случае является структурой, доступной только для чтения, и ее поля неизменны.Хотя память, на которую это указывает, не является.

Мутации на срезе будут отражены в памяти, на которую он указывает в data, что, как я полагаю, вы хотите.Предупреждения в этом случае могут быть проигнорированы:

 // ReSharper disable once ImpureMethodCallOnReadonlyValueField

Также есть относительно известный вопрос, на который Джон Скит и Эрик Липперт говорят о нечистых методахи их разветвления на структуры

Нечистый метод вызывается для поля только для чтения

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...