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