2015-12-12 50 views
2

我對lua非常熟悉,我想要執行簡單的變量設置值。C#中lua`local variable = var1或var2`的模擬是什麼?

在Lua:

local variable = var1 or var 2 

這意味着如果var1存在,variable的值設置爲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#不允許按照您展示的方式從整個數組中切出單個字段,否則就像在dasblinkenlight的答案中所說的那樣檢查'null'。 –

回答

3

與Lua不同,C#不允許引用不存在的變量。它,然而,讓您引用設置爲null變量,並跳過null值,如:

var variable = var1 ?? var2; 

這將設置variablevar1的價值,如果它不是null;否則,它會將其設置爲var2的值。

爲了這個工作var1必須是可空,即,它應當是class類型的變量,或System.Nullable<T>struct類型的變量。

我只是想通過在單個陣列中xynamedelaytimer值。 name將是string,其餘的爲intname是唯一需要的值。

C#提供了一種傳遞命名參數的機制。通過提供的參數名稱

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

你可以使用任何的可選項的16個可能的組合稱之爲:如果您結合起來,與設置默認值的能力,你可以建立一個看起來像這樣的API

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

相關問題