2011-03-19 50 views
1

我打電話接受參數謂詞T A濾波方法傳遞多個參數到謂詞<T>

void MethodName(Predicate<T> param) 
{ 
} 

x.MethodName(x => x.SomeProperty == 10); // or 
x.MethodName(delegate(MyClass x) {return x.SomeProperty == 10;}); 

的問題是,我需要能夠在幾個不同的值進行過濾,和值的數量是不明。具有3個值的示例爲

x.MethodName(x => x.SomeProperty == 10 || x => x.SomeProperty == 20); // or 
x.MethodName(delegate(MyClass x) {return x.SomeProperty == 10 || x.SomeProperty == 20;}); 

我可以使用未知數量的可能值工作嗎?這將是馬麗娟,但它不是possilbe :)

x.MethodName(x => x.SomeProperty == {10, 20}); 

謝謝, 戈蘭

+0

聲明的'{10,20}的列表或陣列'然後'X => list.Contains (x.SomeProperty)'應該做的伎倆。 – 2011-03-19 14:47:37

回答

1
x.MethodName(x => new []{10, 20}.Contains(x.SomeProperty)); 
+0

這將在每次調用謂詞時創建一個新數組。如果在lambda之外聲明數組,則只會在聲明lambda時創建數組。 – Gabe 2011-03-19 14:51:12

+0

OP提到了未知數量的項目進行比較,但沒有提到這個過濾器被調用的次數。我假設它只是給定一組值的一次。 – 2011-03-19 14:55:13

+0

是的,只有一次。也許Gabe想說的是,每次當x.SomePropety評價新值(在過濾期間)時,它都會重新創建數組。例如,在100個產品的集合中,如果我搜索類別1,3和5的產品,它將創建該陣列的100倍。我沒有測試過這個,只是我的解釋,因爲我會在方法之外創建一個數組。 謝謝,它工作得很好。 – Goran 2011-03-19 16:34:48