2010-11-03 115 views
1

任何人都知道是否有一種更簡單或更簡單的方法來做同樣的事情?是否有更簡單或更簡單的方法來做相當於WHERE IN(aa,bb,cc)的?

另外,我應該注意的任何副作用?

var setters = from setterBase in Style.Setters 
       let setter = (setterBase as Setter) 
       let properties = new []{ HorizontalContentAlignmentProperty, VerticalContentAlignmentProperty } 
       where setter!=null && properties.Contains(setter.Property) 
       select setterBase; 

到目前爲止,它的最好的,我想出了...

回答

1

沒有必要爲每個設置者新建一個數組。

var properties = new []{ 
    HorizontalContentAlignmentProperty, 
    VerticalContentAlignmentProperty }; 

var setters = from setter in Style.Setters.OfType<Setter>() 
       where properties.Contains(setter.Property) 
       select setter; 
+0

感謝您指出'讓'每次重新創建數組,我忘了那一個......這可能會對兩個集合的大小('屬性'和'setter')產生重大影響 – smichaud 2010-11-04 11:14:34

+0

如果屬性有很多大小,考慮使用HashSet而不是數組。 – 2010-11-04 12:29:33

0

不是真的。對於兩個選項,使用or可能更具可讀性,您可以使用OfType而不是as -cast和第一個letOfType不會返回null元素,所以你可以刪除過濾器,以及:

var setters = from setter in Style.Setters.OfType<Setter>() 
       where (setter.Property == HorizontalContentAlignmentProperty || 
        setter.Property == VerticalContentAlignmentProperty) 
       select setter; 
+0

不錯!我只是用OfType <>重寫。使用OfType時,您不需要空檢查,對吧? – 2010-11-03 20:44:23

+0

@Robert - 我不確定 - 集合*可能包含null,但你可以刪除它。 – Kobi 2010-11-03 20:46:02

+0

(setter!= null)是多餘的,因爲null永遠不會評估爲Setter類型。 – Goblin 2010-11-03 20:47:25

0

我會做到這一點。我仍然喜歡讓數組中的屬性輕鬆支持更多屬性。太好了!

var setters = from setter in Style.Setters.OfType<Setter>() 
       let properties = new []{ HorizontalContentAlignmentProperty, VerticalContentAlignmentProperty } 
       where properties.Contains(setter.Property) 
       select setter; 
相關問題