2011-11-17 78 views
2

我總共有102個值與名爲ArrivedFlag的字段名相關聯。是否有更有效的方法來管理IF語句?

然後我在標記頁上有一個TextBox控件,其ID爲txtFlag

在我隱藏,我有一個if語句,說:

If txtFlag <> "value1" and txtFlag <> "another value" Then 
    lblMessage.Text ="You don't have the ability to view details" 
end if 

這工作得很好。

但是,考慮到有102個值,我覺得做102次IF語句有點低效。

有沒有人知道更好的方法來處理這個問題?

Dim allowedFlags = New List(Of String)() 

With { _ 
    "value1", _ 
    "another value" 
} 
End With 
If Not allowedFlags.Contains(txtFlag) Then 
    lblMessage.Text = "You don't have the ability to view details" 
End If 

回答

2

值添加到列表中,然後使用。載

// hopefully you can get the 102 strings from an xml document or db 
var listOfFlags = new List<string> { "value1", "another value", .... }; 

if (!listOfFlags.Contains(txtFlag)) 
{ 
    lblMessage.Text = "you dont' have ..." 
} 
+0

經過一些微小的修改後,這對我來說效果很好。謝謝你,感謝所有貢獻者。 – Kenny

2

「switch」語句會更乾淨,雖然102個「case」仍然有點混亂。 如果你採用了戰略模式,你可能會遇到一些「階級爆炸」的措施。

我可能從一個switch語句開始,然後看看提取一些常見的行爲和朝着戰略模式的方向。

2

把你的允許值到一個數組,然後只查詢用戶的選擇是否是數組中:

if(!allowedFlags.Contains(txtFlag)) 
    lblMessage.Text ="You don't have the ability to view details"; 

更好的是,您可以使用HashSet<string>作爲允許的值,以便您有O(1)查找時間。

+0

非常感謝您的時間和幫助。我喜歡Jason's和BrokenGlass的解決方案,但是我很難讓它工作。即使從我創建的列表中進行選擇,我仍然會收到「您無法查看詳細信息」。我已經更新了上面的當前代碼。 – Kenny

相關問題