gpt4 book ai didi

c# - 封装嵌套的 XML

转载 作者:太空宇宙 更新时间:2023-11-03 22:18:07 25 4
gpt4 key购买 nike

我正在尝试找到一种将 XML 封装到 C# 类中的优雅方法。环顾四周,我在某处找到了一个 Java 示例(此时不要问我在哪里),它激发了我的想法,但我不确定它是否可以在 C# 中实现,或者我是否以正确的方式进行。

我目前使用的不优雅的方法是使用一系列嵌套的 switch 语句遍历 XPathNodeIterator/XPathNavigator 节点,这些语句指示找到适当节点后要执行的操作,并列出所有未处理的节点。我正在尝试的更优雅的方法涉及使用帮助程序类来完成大部分迭代,并且基本上采用节点名称以及遇到该节点时要采取的操作。该类目前看起来像这样(请注意,这是理论上的,请参阅下文了解原因):

class XmlNodeIterator
{
public XmlNodeIterator(XPathNodeIterator node, Dictionary<string, Action> children)
{
foreach (XPathNavigator childNode in node.Current.SelectChildren(XPathNodeType.Element))
{
Action child = null;
try
{
child = children[childNode.LocalName];
}
catch (KeyNotFoundException e)
{
// Log the warning in some fashion
}
if (child != null)
child.Invoke();
}
}
}

甚至在进行概念验证测试之前,我就发现了这个概念的问题。 :) 如何访问委托(delegate)函数中的内部 childNode(例如 childNode.Value 或 childNode.GetAttribute)并将其分配给外部变量或属性?

总的来说,我对代表还是很陌生,所以我什至不知道这是否可能。如果是,太好了!如果没有,我可以尝试其他优雅的解决方案吗?还是我应该坚持使用嵌套开关?

最佳答案

考虑使用 Action<T>而不是 Action .它的Invoke方法可以带参数调用。在你的情况下:

Action<XPathNavigator> child = null;
...
child.Invoke(childNode);

或者,如果您想分配任何外部值,您可以使用 Func<T1,T2>像那样:

Func<XPathNavigator, string> child = null;
...
var value = child(childNode);

顺便说一句,如第二个示例所示,可以省略直接调用 Invoke 。我们可以简单地将其称为方法

关于c# - 封装嵌套的 XML,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4274097/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com