模仿Python功能的最佳方式';s”;在“;关键字

本文关键字:关键字 功能 Python 最佳 方式 模仿 | 更新日期: 2023-09-27 18:29:20

环顾四周,但没有看到这个问题。我本质上想知道做这件事的"最佳"(最快、最可读、最惯用等)方式是什么

上下文是,我有一个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));

这合理吗?这对我来说似乎有点迟钝,尽管这可能只是我个人的迟钝。

edit我想我在这里用错了Any()。抱歉,现在正在找合适的林克。更改为Contains,并添加了typeof()。我想这就是我在文本框中输入的内容。

模仿Python功能的最佳方式';s”;在“;关键字

我不知道为什么要使用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中。如果是,则包括它。如果不是,则排除它。