如何通过铸造优化许多条件?

时间:2019-02-07 15:49:07

标签: c# optimization

请用字典优化此代码吗?否则。

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

1 个答案:

答案 0 :(得分:0)

我认为您可以使用转换选项:

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;

                }

希望获得帮助。