首页 > 解决方案 > 如何通过铸造优化许多条件?

问题描述

请问可以用字典优化这段代码吗?否则。

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

标签: c#optimization

解决方案


我认为您可以使用 switch 语句:

csharp-pattern-matching-7-0

                switch (node)
                {
                    case INode<ContainerValue> containerValue:
                        DataUtils.ContainerToData(containerValue, data);
                        break;
                    case INode<TextValue> textValue:
                        DataUtils.ContainerToData(textValue, data);
                        break;

                }

希望这有帮助。


推荐阅读