c# - 如何将字典转换为一个条件
问题描述
我有一个只需要运行一次的方法。如果满足长条件。例如:
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();
}
但是如果你这样写,那么该方法将被执行多次,就像字典中的许多键一样。
解决方案
为什么不像@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();
推荐阅读
- c# - 无法部署 ML.net,“缺少”FastTreeNative.dll
- node.js - UnhandledPromiseRejectionWarning 后跟 PromiseRejectionHandledWarning
- python - 根据单词组合过滤行
- java - Java 写入 Windows Server 2016 时文件上次修改未更新
- docker - 如何在docker中添加文件
- html - 有什么方法可以将自定义的 Css 应用于 PowerBI 中的不同控件
- ruby-on-rails - 无法使用 Rails 和 Wicked PDF 打印换行符
- python-3.x - Go strings.Contains() 比 Python3 慢 2 倍?
- r - 编辑 shiny.tag 元素
- kubernetes - 如何获得 Kubernetes 的单个 pod 名称?