編譯器不會明白你的意思在這裏。
switch (Show)
{
case Display.Expense:
if (expected.EXPENSE != true)
break;
// missing break here
case Display.NonExpense:
編譯器將無法連接點,瞭解您if
語句內break;
聲明鏈接到switch
聲明。相反,它會嘗試將它鏈接到一個循環,因爲break;
自己的語句只能用於循環,才能打破它。
這意味着您的case
塊缺少它的break
語句來完成它,因此編譯器會抱怨。
而不是試圖從switch
聲明中擰出必要的代碼,而是將分解您原來的if
聲明。
這是你的:
if ((Show == Display.All) || (expected.EXPENSE == true && Show == Display.Expense) || (expected.EXPENSE == false && Show == Display.NonExpense))
{
//Code
}
這是我會怎麼寫呢:
bool doDisplayExpected =
(Show == Display.All)
|| (Show == Display.Expense && expected.EXPENSE)
|| (Show == Display.NonExpense && !expected.EXPENSE);
if (doDisplayExpected)
{
// code
}
你不有在一行收拾一切。
而且,我想嘗試的名字屬性,使他們更容易閱讀,我將在EXPENSE
屬性重命名爲IsExpense
,這樣上面的代碼會這樣寫:
bool doDisplayExpected =
(Show == Display.All)
|| (Show == Display.Expense && expected.IsExpense)
|| (Show == Display.NonExpense && !expected.IsExpense);
if (doDisplayExpected)
{
// code
}
然後,理想情況下,我將重構出來的子表達式的方法:
bool doDisplayExpected =
ShowAll()
|| ShowExpense(expected)
|| ShowNonExpense(expected);
if (doDisplayExpected)
{
// code
}
public bool ShowAll()
{
return Show == Display.All;
}
public bool ShowExpense(Expected expected)
{
return Show == Display.Expense && expected.EXPENSE;
}
public bool ShowNonExpense(Expected expected)
{
return Show == Display.NonExpense && !expected.EXPENSE;
}
然後你就可以把表達式回到if語句:
if (ShowAll() || ShowExpense(expected) || ShowNonExpense(expected))
{
// code
}
這應該更容易閱讀,並在以後更改。
考慮有關錯誤的這個問題。 http://stackoverflow.com/questions/6696692/control-cannot-fall-through-from-one-case-label –
'開關'是針對**不同的**行爲在不同情況下。在diffrenet的情況下,你只有**行爲**,因此@Dennis寫道你不需要'switch'。 –
它不清楚你正在試圖通過使用if語句,除了'break'開關的情況下什麼都不做。如果你想在case情況下使用一個if語句,你需要一個其他條件,這也是一個'break' –