[英]Unity c# need help understanding switch statement
我試圖用它們來理解 switch 語句和條件。
這是當前的腳本。
Unit thisUnit; <- my reference to the unit stats it has.
int captureStartingHealth;
int captureStartingMana
void Start()
{
captureStartingHealth = thisUnit.currentHP;
// In start it's the same as thisUnit.maxHP;
captureStartingMana = thisUnit.currentMP;
// In start it's the same as thisUnit.maxMP;
}
void AssignmentSwitchStatement()
{
switch (captureStartingHealth)
{
case int captureStartingHP when captureStartingHealth < (float)captureStartingHealth:
behaviour = Behaviour.SUPPORT;
roll = Random.Range(0, 101);
IncrementSupportRollChances();
break;
default:
roll = Random.Range(0, 101);
DefaultRollChances();
break;
}
}
例如,當我的 captureStartingHealth 變量小於 40 時,構建引用方式的正確語法是什么。 當我創建語法時,它不允許我簡單地使用整數“captureStartingHealth”代替..它似乎只有在我為案例創建一個新的整數變量時才有效。
那么,為什么我不能像這樣使用我的 captureStartingHealth 整數?
switch (captureStartingHealth) // example switch
{
case captureStartingHealth when captureStartingHealth < (float)thisUnit.maxHP:
//execute code
break;
}
"
相反,它需要我創建一個新整數
case int a when a < conditional
但是我怎么知道這個新的 int 什么時候達到了條件為真呢? 就像我不明白這個 int "a" 是如何用於 switch 的,因為它是一個沒有分配任何東西的本地整數嗎? 所以對我來說就像說..
case int a (0) 當 a (0) < (float)thisUnit.maxHP: // 執行代碼
我在這里做錯了什么? 可能有很多事情,但老實說我不知道為什么這個案例需要一個新的整數,而不是使用我想為條件語句比較的值。
第一個switch
代碼完全沒有意義!
在
switch(captureStartingHealth)
{
case int captureStartingHP:
...
break;
default:
...
break;
}
您通過模式匹配進行類型檢查並檢查captureStartingHealth
是否為int
。 基本上喜歡做
if(captureStartingHealth is int captureStartingHP)
{
...
}
else
{
...
}
哪種等於做
if(captureStartingHealth.GetType().IsAssignableTo(typeof(int)))
{
int captureStartingHP = (int)captureStartingHealth;
...
}
else
{
...
}
但是由於captureStartingHealth
是一個int
無論如何這總是true
並且只是不必要的開銷。
然后你無論如何扔掉類型轉換captureStartingHP
並比較
captureStartingHealth < (float)captureStartingHealth
這里有兩件奇怪的事情:
int
值時,什么是float
好?a < a
永遠不會是真的......你有兩次相同的變量! 如前所述,如果您真正想要做的唯一檢查是比較兩個值,您寧願使用簡單的if - else
// you do this in any case so rather pull it out of the checks in order to write/maintain it only once
roll = Random.Range(0, 101);
if(captureStartingHealth < thisUnit.maxHP)
{
behaviour = Behaviour.SUPPORT;
IncrementSupportRollChances();
}
else
{
DefaultRollChances();
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.