Существует как неявное преобразование из 'плавать' и 'плавать' и 'поплавок' в 'поплавок'


В вероятно лучшем сообщении об ошибке, которое я получил за некоторое время, мне любопытно, что пошло не так.

Исходный код

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 13

1 ответ:

Троичный (e?a: b) оператор немного сложнее для системы типов, потому что обе стороны должны дать один и тот же тип возврата. Я бы не удивился, если бы там был какой-нибудь тонкий жучок. Хорошо, что комплиментаторы время от времени заставляют нас смеяться.

Это, вероятно, тоже исправляет:

float currElbowAngle = LeftArm ? 0.0f + Elbow.transform.localRotation.eulerAngles.y 
                               : 360f - Elbow.transform.localRotation.eulerAngles.y
Я предполагаю, что проблема заключается в том, что ваша истинная ветвь является lvalue, а ложная ветвь-rvalue. Мой обходной путь делает обе ветви rvalue.