如何根据复选框的状态改进获取列表<MyEnum>?

问题描述 投票:0回答:1

我有 6 个复选框,它们代表过滤器并且是布尔值。这些过滤器类型由枚举表示。我需要根据复选框的状态获取一个列表,并且我正在尝试以正确的方式进行操作。

目前我有 6 个复选框,它们都是布尔值:

bool checkbox1Filter1
bool checkbox2Filter2
//...

我有一个看起来像这样的枚举,有 6 个值:

public enum MyFilters : byte
{
Filter1 = 12,
Filter2 = 30,
...
}

我目前有一个函数,可以根据复选框的状态将我的过滤器添加到列表中:

function List­<MyFilters> GetMyFilters()
{
var lst = new List<MyFilters>();
if(checkbox1Filter1) {lst.Add(MyFilters.Filter1)}
if(checkbox2Filter2) {lst.Add(MyFilters.Filter2)}
...
return lst;
}

基本上我想完全摆脱这个功能,做一些更聪明的事情,到处都少点“如果”。字典可以解决这个问题吗?

c# data-structures blazor
1个回答
0
投票

首先,您可以使用枚举标志来表示您的 6 个复选框。这是文档中的示例:

[Flags]
public enum Days
{
    None      = 0b_0000_0000,  // 0
    Monday    = 0b_0000_0001,  // 1
    Tuesday   = 0b_0000_0010,  // 2
    Wednesday = 0b_0000_0100,  // 4
    Thursday  = 0b_0000_1000,  // 8
    Friday    = 0b_0001_0000,  // 16
    Saturday  = 0b_0010_0000,  // 32
    Sunday    = 0b_0100_0000,  // 64
    Weekend   = Saturday | Sunday
}
然后,您可以使用它们构建应用于数据集的

IEnumerable

 查询。这是一个快速演示。请注意,返回的 
IEnumerable
 仅当您在 
foreach
 循环中使用它时才会具体化。

private List<string> countries = new() { "Albania", "France", "Spain" }; private IEnumerable<string> GetFilter() { var query = countries.AsEnumerable(); @if (true) query = query.Where(item => item.ToLower().StartsWith("a")); @if (true) query = query.Where(item => item.ToLower().EndsWith("a")); return query; }
    
© www.soinside.com 2019 - 2024. All rights reserved.