c# - 如何通过铸造优化许多条件?
问题描述
请问可以用字典优化这段代码吗?否则。
if (node.Type.Equals(NodeType.CONTAINER))
{
DataUtils.ContainerToData((INode<ContainerValue>) node, data);
}
else if (node.Type.Equals(NodeType.TEXT))
{
DataUtils.TextToData((INode<TextValue>) node, data);
}
我有15个这样的条件。
我认为那本字典会起作用,但是如何进行铸造呢?(INode<pair.Value>) node
. 我正在寻找一些像这样的解决方案:
var dictionary = new Dictionary<string, Type>();
dictionary.Add(NodeType.CONTAINER, tyeof(ContainerValue));
dictionary.Add(NodeType.TEXT, tyeof(TextValue));
foreach (var pair in dictionary)
{
if(node.Type.Equals(pair.Key))
{
// wrong
DataUtils.ContainerToData((INode<pair.Value>) node, data);
}
}
解决方案
我认为您可以使用 switch 语句:
switch (node)
{
case INode<ContainerValue> containerValue:
DataUtils.ContainerToData(containerValue, data);
break;
case INode<TextValue> textValue:
DataUtils.ContainerToData(textValue, data);
break;
}
希望这有帮助。
推荐阅读
- python - ORA-01036: 非法变量名称/编号 - Python 插入查询
- c# - c#Web服务处理重复/多个项目
- mysql - 查询包括所有行中某一行的总和
- c# - 返回没有特定子元素的 xml 节点
- unit-testing - 在 bazel 单元测试中查找文件作为外部依赖项
- json - SugarCRM 中带有 JSON 正文的 GET 请求
- java - 错误:(86, 50) 找不到与给定名称匹配的资源(在“layout_toLeftOf”处,值为“@id/tvComment”)
- react-native - refs 在 iOS 上工作但在 Android 上未定义 - React Native
- python-3.x - Selenium 发送键导致点击功能中断
- c# - RestClient 请求返回 TrustFailure 错误