【问题标题】:c# Using setting dynamic expression dynamically?c# 使用动态设置动态表达式?
【发布时间】:2011-09-28 16:06:21
【问题描述】:

我是动态关键字的新手,并且一直在研究它,因为我想用它来解析 xml。我遇到了这个用作测试的示例:http://blogs.captechconsulting.com/blog/kevin-hazzard/fluent-xml-parsing-using-cs-dynamic-type-part-1

在示例中,它们显示:dx.book[2].authors.author[0].name.last.Value,我想知道是否有可能以某种方式从字符串或数据库值构建动态表达式?

伪例子:

dynamic dx = new DynamicXml(xml);
Console.WriteLine("dx.book[2].authors.author[0].name.last.Value");

我研究了一个 EVAL 来做这样的事情,或者以某种方式研究反射,但好奇是否有更好的方法。非常感谢任何建议或帮助,或者简单的拒绝。

【问题讨论】:

  • 您是否尝试以字符串形式执行代码?换句话说,像 Javascript eval() 方法这样的代码即数据方法?
  • @Sean Thoman:不完全是。我创建了动态对象(在运行时编译和执行),我只想能够在运行时对我的动态对象使用不同的动态表达式。我会发现这对 xml 非常有帮助,因此我可以拥有任何 xml 架构,并且能够使用相同的代码对其进行解析。最终,如果这是可行的,我会将解析的 xml 值传递给另一个类以进行进一步处理。不管这是否有意义,我对这个概念的术语是模糊的。
  • 我认为像 XPath 这样的东西更适合您想要完成的工作。它是一种 XML 查询语言,其中有一个 XPath 表达式字符串,可用于选择任意 XML 结构中的节点。
  • @Stefan,我同意,总的来说,我只是在尝试新事物,并想使用这个动态关键字来体验,但我熟悉 xpath 并且以前使用过它,所以我可能会这样做再次指向。我可能会保持开放,但只是为了看看其他人是否也有想法。感谢您的回复!

标签: c# dynamic


【解决方案1】:

InvokeGetChain 接受一串属性并动态调用它们。它更像是一种反射风格的方式(虽然比反射更容易和更快,并且适用于动态对象。

它位于 ImpromptuInterface 开源项目中(通过 nuget)。从 v6.0 开始,它会以上面的确切格式解析索引器,但不包括目标对象。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多