2015-12-12 1 views
2

Im хорошо знакомы с lua, и я хочу выполнить w простое значение переменной.Что такое аналог локальной переменной lua = var1 или var2` в C#?

В Lua:

local variable = var1 or var 2 

Что означает, если var1 существует, то установите значение variable «s в var1, в противном случае установите его в var2. Как выполнить такое уравнение в C#? Я просто изучаю Unity 3D, интересно, как это делать.

Редактировать

Так что в моем конкретном случае:

public GameObject to (GameObject localTarget, string[][] transitionParams) 
{ 
    int delay = transitionParams.delay; 
    int timer = transitionParams.timer; 

    int x = transitionParams.x; 
    int y = transitionParams.y; 
} 

Как проверить, если эти PARAMS установлены? Каждый из transitionParams может быть nil. Они все варианты.

+2

На самом деле не имеет смысла в C#, в котором локальные переменные определены во время компиляции. Если переменная не существует, код не будет компилироваться. – pvg

+0

C# не разрешает разрезать одно поле из целого массива так, как вы показываете, в противном случае это вопрос проверки «null», как говорит dasblinkenlight в своем ответе. –

ответ

3

В отличие от Lua, C# не позволяет ссылаться на переменные, которых не существует. Это, однако, позволяют ссылаться на переменные, которые установлены в null, и пропустить null значения, как это:

var variable = var1 ?? var2; 

Это позволит создать variable к var1 «s значение, если оно не null; в противном случае он установил бы значение var2.

Для того, чтобы это работало var1 должно быть обнуляемым, то есть она должна быть переменной типа class или переменная типа structSystem.Nullable<T>.

Я просто хотел бы передать x, y, name, delay и timer значения в одном массиве. name будет string, остальные из них int. name - это единственное значение, которое требуется.

C# предлагает механизм для передачи именованных параметров. Если вы объедините это с возможностью установки значений по умолчанию, вы можете создать API, который выглядит следующим образом:

public GameObject(
    string name 
, int? x = null 
, int? y = null 
, int? delay = null 
, int? timer = null 
); 

Вы можете вызвать его с помощью любого из 16 возможных комбинаций дополнительных элементов, предоставляя имена параметров:

var unicorn = new GameObject("unicorn", x:12, delay:24); 
var bunny = new GameObject("bunny", x:40, y:30, timer:0); 
+0

Итак, если моя функция может принимать 4 переменные, возможно, 3 из них будут необязательными? так что я могу передать их или нет? И как назначить их локальным переменным в функции? – Lukis

+0

@Lukis Вы можете сделать переменную опциональной, указав для нее значение по умолчанию, например. 'void foo (int a, int? b = null, int? c = null, int? d = null)' принимает хотя бы одно и не более четырех аргументов. Если вызывающий объект не предоставляет аргумент, ваш метод видит его значение как «null».Как только параметр передается в вашу функцию, он ведет себя как локальная переменная, то есть изменения в ней не отображаются вызывающему. Единственными исключениями являются параметры 'ref' и' out'. – dasblinkenlight

+0

Звучит неплохо. Но как передать массив с дополнительными значениями? Я недавно добавил свой пример кода к вопросу – Lukis