[英]Best way to emulate the functionality of Python's “in” keyword in C#?
環顧四周,但沒有看到這個問題。 我本質上想知道這樣做的“最佳”(最快,最易讀,最慣用等等)方式。
上下文是我有一個LINQ查詢要根據可能的枚舉值列表進行過濾,並希望使其盡可能不嵌套。 在python中,它將類似於
def GetItems(status_types:list)
return filter(lambda item: item.Status in status_types, ALL_ITEMS)
我認為在C#中,我可能必須做一個
ALL_ITEMS
.Where(i => Enum.GetValues(typeof(StatusEnum)
.Intersect(status_types))
.Contains(i.Status));
這合理嗎? 對我來說似乎有點鈍,盡管這可能只是我自己的鈍角在起作用。
編輯我認為我在這里使用Any()錯誤。 很抱歉,現在尋找正確的linq somethingo。 更改為包含,並添加了typeof()。 我猜這就是在文本框中鍵入內容所得到的。
我不確定您為什么要使用Intersect
來過度梳理事物,因為您只對findinf感興趣,如果status_types
包含i.Status
而不是它們的集合相交。
無論如何,盡管第一種形式看起來更簡單(盡管您提到了Any的使用,但我想出了第二種形式),但是這兩種方法都可以完成工作:
ALL_ITEMS
.Where(i => status_types.Contains(i.Status));
要么
ALL_ITEMS
.Where(i => status_types.Any(x=>x==i.Status));
var itemsWithCorrectStatus = collection.Where(i=>status_types.Contains(i.Status));
這將遍歷集合中的每個項目,並檢查i.Status是否在status_types中。 如果是這樣,請將其包括在內。 如果不是,將其排除。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.