C#集合通过匹配项来判断是否为True

本文关键字:判断 是否 True 集合 | 更新日期: 2023-09-27 18:27:57

我在一个项目中遇到了实时业务问题。场景是我必须允许用户根据当前应用程序状态进行更改。我将简要描述流程如下,

应用程序中有4个阶段,即阶段1、阶段2、阶段3和阶段4,并且存在与上述阶段相关联的状态,如A、B、C、D、E、F、G等

根据我必须允许在每个阶段进行更改的状态,下面是允许编辑的各个阶段和状态,

  1. 第1阶段=>A、B、C
  2. 第2阶段=>A、C、G
  3. 第3阶段=>F、E
  4. 第4阶段=>A、B、C、D、E

我面临的问题是,有没有一种方法可以通过将阶段和状态传递到c#中的集合来获得可编辑的指示符,如果该状态对于已传递的阶段是可编辑的,那么它应该返回true或false

这可以通过C#字典或哈希表实现吗?

C#集合通过匹配项来判断是否为True

你的意思是这样的吗:

private static readonly HashSet<char>[] _allowed =
{
    new HashSet<char> { 'A', 'B', 'C' },
    new HashSet<char> { 'A', 'C', 'G' },
    new HashSet<char> { 'F', 'E' },
    new HashSet<char> { 'A', 'B', 'C', 'D', 'E' },
};
bool Allowed(int stage, char status)
{
    // Assume stage is 1-based, so subtract 1 for array index
    return _allowed[stage - 1].Contains(status);
}

在评估了c#中适当的集合行为后,我决定使用字典来实现这一点

IDictionary<string, HashSet<string>> sets = new Dictionary<string, HashSet<string>>();
        sets.Add("Stage 1", new HashSet<string>{ "A","B","C"});
        sets.Add("Stage 2", new HashSet<string>{ "D","E"});
public static bool GetAllowed(string stage,string status, IDictionary<string,HashSet<string>> allowedSets)
    {
        return allowedSets[stage].Contains(status);
    }
Console.WriteLine(GetAllowed("Stage 1", "A", sets)); // returns true
Console.WriteLine(GetAllowed("Stage 2", "A", sets)); //returns false