Подтвердить что ты не робот

Существует неявное преобразование из "float" и "float" и от "float" до "float"

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

Исходный код

float currElbowAngle = LeftArm ? Elbow.transform.localRotation.eulerAngles.y 
                               : 360f - Elbow.transform.localRotation.eulerAngles.y

Я использую Unity3d и С#; LeftArm - это тип bool и в соответствии с documentation Elbow.transform.localRotation.eulerAngles.y возвращает значение float.

Этот код дает мне ошибку:

Существует неявное преобразование из "float" и "float" и от 'float' до 'float'

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

float currElbowAngle = LeftArm ? (float) Elbow.transform.localRotation.eulerAngles.y 
                               : 360f - Elbow.transform.localRotation.eulerAngles.y

Итак, мой вопрос: что это за ошибка, пытающаяся связаться и что на самом деле пошло не так?

Обновление 1: Локоть - это GameObject, и эта ошибка находится в Visual Studio

4b9b3361

Ответ 1

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

Возможно, это исправление тоже:

float currElbowAngle = LeftArm ? 0.0f + Elbow.transform.localRotation.eulerAngles.y 
                               : 360f - Elbow.transform.localRotation.eulerAngles.y

Я размышляю, что проблема в том, что ваша истинная ветвь - это lvalue, а ложная ветвь - rvalue. Мое обходное решение делает обе ветки rvalue.