Резервное значение C # - PullRequest
0 голосов
/ 17 мая 2018

В javascript вы можете использовать оператор ||, чтобы по существу иметь запасное значение, поэтому, если предыдущие операторы возвращают значение Falsey, то используется значение после ||.

Итак, дляпример здесь, если GetComponent возвращает ноль, тогда мы по умолчанию Vector2.zero

Vector3 velocity = GetComponent<Rigidbody2D>().velocity || Vector2.zero;

Есть ли сокращенный способ написать это?Потому что с учетом вышесказанного я получаю:

Оператор '||'не может быть применен к операндам типа Vector2 и Vector2

Ответы [ 2 ]

0 голосов
/ 17 мая 2018

В C # 4,

Vector3 velocity;
var comp = GetComponent<Rigidbody2D>();

if (comp != null)
    velocity = comp.velocity;
else
    velocity = Vector2.zero;

Также попробуйте эту версию, чтобы увидеть, работает ли она.Это лучше, и если comp.velocity равно Vector2, я ожидаю, что так и будет.Но я не знаю Unity, так что попробуй.

var comp = GetComponent<Rigidbody2D>();
Vector3 velocity = (comp == null) ? Vector2.zero : comp.velocity;

Вы можете видеть, почему оператор ?. был встречен с такими громкими осаннами, когда они добавили его в язык.

0 голосов
/ 17 мая 2018

Конечно, вы можете использовать:

Vector3 velocity = GetComponent<Rigidbody2D>()?.velocity ?? Vector2.zero;

Оператор ?. гарантирует, что если GetComponent<Rigidbody2D>() возврат null, то .velocity не будет разрешен и весь оператор будет нулевым.

Затем оператор ?? возвращает значение слева (GetComponent<Rigidbody2D>()?.velocity), если оно не null, а если значение слева null, то возвращает значение справа (Velocity2.zero).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...