我有 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;
}
基本上我想完全摆脱这个功能,做一些更聪明的事情,到处都少点“如果”。字典
首先,您可以使用枚举标志来表示您的 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;
}