У Роба Уолкера лучший отклик, поскольку он начал с документов, а затем обосновал код (тогда как я пошел другим путем).
Если вы скомпилируете пример кода с закомментированным полем триггера, а затем запустите IlAsm для получения результирующего MSIL, вы увидите, что для локальной переменной vector нет кода операции initobj
.
Отсутствие initobj
хорошо, когда структура Vector2
содержит только типы значений. В конце концов, они просто сырая память. Однако, если структура Vector2
также содержит ссылку, она должна быть инициализирована, чтобы не иметь ссылки на неинициализированный объект.
Чтобы избежать возврата частично унитализированного объекта, вам необходимо явно записать в обработчик события trigger
или инициализировать весь объект с помощью новой операции. Однако ни в коем случае структура не превращается в ссылочный тип.