2012-09-11 23 views
2

首先,如果標題不明確或描述性不好;我不知道該寫些什麼。在多個值上使用布爾運算符的快捷方式

我不知道是否有更好的方法來做到這一點操作:

bool result = variable1.innerValue.level2.innerValue == 1 || 
       variable1.innerValue.level2.innerValue == 2 || 
       variable1.innerValue.level2.innerValue == 3; 

我們不能寫類似:

bool result = variable1.innerValue.level2.innerValue == (1 || 2 || 3); 

這會給出一個語法錯誤。

任何想法?

回答

8

你可以使用一個集合作爲佔位符和Enumerable.Contains

if(new[]{1, 2, 3}.Contains(variable1.innerValue.level2.innerValue)) 
{ 

} 

,或者對於它的價值,這個擴展:

public static bool In<T>(this T source, params T[] list) 
{ 
    if(null==source) throw new ArgumentNullException("source"); 
    return list.Contains(source); 
} 

這使您可以這樣寫:

if(variable1.innerValue.level2.innerValue.In(1, 2, 3)) 
{ 

} 

What are your favorite extension methods for C#? (codeplex.com/extensionoverflow)

+1

作爲只要有幾個值,數組就更好。但是,如果值列表變得足夠大,請考慮切換到「HashSet .Contains」。 – CodesInChaos

0

(new List<int>(){1,2,3}).Exists(i=>i == variable1.innerValue.level2.innerValue) 
1

在這種情況下。你可以做Enumerable.Range(1, 3).Contains(variable1.innerValue.level2.innerValue)

1
using System.Linq; 
... 
bool result = new[] {1, 2, 3}.Contains(variable1.innerValue.level2.innerValue); 
1
var listToCheck = new int[]{1,2,3}; 
var innerValue = variable1.innerValue.level2.innerValue; 

bool result = listToCheck.Contains(innerValue); 
1

老實說,這使我想到的第一件事是好老Introduce Explaining Variable重構,這不僅減少了重複,但也使你的代碼更不言自明:

var innerValue = variable1.innerValue.level2.innerValue; 
bool result = innerValue == 1 || innerValue == 2 || innerValue == 3;