С# 7.2 введены in
модификаторе для передачи аргументов по ссылке с гарантией того, что получатель не будет изменять этот параметр.
В этой статье говорится:
Вы никогда не должны использовать структуру, отличную от readonly, как параметры, поскольку это может отрицательно повлиять на производительность и может привести к неясному поведению, если структура изменена
Что это значит для встроенных примитивов, таких как int
, double
?
Я хотел бы использовать in
выражать намерение в коде, но не за счет потери производительности в оборонительные копии.
Вопросы
- Является ли это безопасно передавать примитивные типы с помощью
in
аргументах и не имеют защитные копии сделали? - Являются ли другие обычно используемые структурные структуры, такие как
DateTime
,TimeSpan
,Guid
,... считаются только дляreadonly
JIT?- Если это зависит от платформы, как мы можем узнать, какие типы безопасны в данной ситуации?