簡體   English   中英

在C#中模擬Python的“ in”關鍵字功能的最佳方法?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM