首页 > 解决方案 > 如何将字典转换为一个条件

问题描述

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

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

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

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

带有 oneif的选项不是很合适,因为该方法只需要运行一次:

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

升级版:

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

但是如果你这样写,那么该方法将被执行多次,就像字典中的许多键一样。

标签: c#dictionary

解决方案


为什么不像@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();

推荐阅读