C#Collection通过匹配项获得False

时间:2014-10-25 06:36:53

标签: c# asp.net .net collections

我在我的一个项目中面临实时业务问题。方案是我必须允许用户根据当前的应用程序状态进行更改。我将简要介绍以下流程,

申请阶段1,阶段2,阶段3和阶段4共有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
  5. 我面临的问题是有没有办法通过将阶段和状态传递给c#中的集合来获取可编辑指标,如果该状态对于传递的阶段是可编辑的,那么它应该返回true或者否则为

    这可以通过C#Dictionary或Hashtable吗?

2 个答案:

答案 0 :(得分:1)

你的意思是这样的:

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);
}

答案 1 :(得分:0)

在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