Существует как неявное преобразование из 'плавать' и 'плавать' и 'поплавок' в 'поплавок'
В вероятно лучшем сообщении об ошибке, которое я получил за некоторое время, мне любопытно, что пошло не так.
Исходный код
float currElbowAngle = LeftArm ? Elbow.transform.localRotation.eulerAngles.y
: 360f - Elbow.transform.localRotation.eulerAngles.y
Я использую Unity3d и C#; LeftArm-тип bool
и согласно документации Elbow.transform.localRotation.eulerAngles.y
возвращает значение float
.
Этот код выдает мне ошибку:
Существуют как неявные преобразования из 'float', так и 'float' и от "поплавка" к "поплавку"
Это исправляет его:
float currElbowAngle = LeftArm ? (float) Elbow.transform.localRotation.eulerAngles.y
: 360f - Elbow.transform.localRotation.eulerAngles.y
Итак, мой вопрос это: что это была за ошибка, пытаясь общаться, и что на самом деле пошло не так?
Update 1: Elbow - это GameObject
, и эта ошибка находится в Visual Studio
1 ответ:
Троичный (e?a: b) оператор немного сложнее для системы типов, потому что обе стороны должны дать один и тот же тип возврата. Я бы не удивился, если бы там был какой-нибудь тонкий жучок. Хорошо, что комплиментаторы время от времени заставляют нас смеяться.
Это, вероятно, тоже исправляет:
Я предполагаю, что проблема заключается в том, что ваша истинная ветвь является lvalue, а ложная ветвь-rvalue. Мой обходной путь делает обе ветви rvalue.float currElbowAngle = LeftArm ? 0.0f + Elbow.transform.localRotation.eulerAngles.y : 360f - Elbow.transform.localRotation.eulerAngles.y