如何将字典转换为一个条件

时间:2018-08-08 09:18:33

标签: c# dictionary

我有一个方法,只需要运行一次。如果满足长期条件。例如:

 if (!("a" == "a" && "b" == "b"))
    RunMethod();

主要问题是我无法预先知道字典可以有多少个键。并且在什么表达之前可能是否定符号。在此示例中,否定符号是字典的值。

var dict = new Dictionary<string, bool>
{
    { "a", false },
    { "b", true }
};

带有一个if的选项不太适合,因为该方法只需要运行一次:

if(dict.ContainsKey("a"))
    RunMethod();

UPD:

var dictFeature = new Dictionary<string, string>
{
    { "a", "a" },
    { "b", "a" }
};

var dict = new Dictionary<string, bool>
{
    { "a", false },
    { "b", true }
};

foreach (var i in dict)
{    
    if(dictFeature.ContainsKey(i.Key))
        RunMethod();
}

但是,如果您这样编写,则该方法将被执行多次,就像字典中的键一样。

2 个答案:

答案 0 :(得分:2)

为什么@ V0ldek建议使用LINQ进行以下操作:

var dictFeature = new Dictionary<string, string>
{
    { "a", "a" },
    { "b", "a" }
};

var dict = new Dictionary<string, bool>
{
    { "a", false },
    { "b", true }
};

if(dict.Any(kv => dictFeature.ContainsKey(kv.Key))
{
    RunMethod();
}

或更老的学校:

bool needsToExecute = false;

foreach (var i in dict)
{    
    if(dictFeature.ContainsKey(i.Key))
    {
        needsToExecute = true;
        break;
    }
}

if(needsToExecute)
    RunMethod();

答案 1 :(得分:1)

如果仅想在dictFeature中存在dict中的所有键的情况下运行该操作,则:

if(dict.Keys.All(key => dictFeature.ContainsKey(key)))
    RunMethod();