VB.NET XML 字面量解析

3
如果我有一个文本存储在数据库、文件或资源中,都不重要:
<code><%= Integer.MaxValue %></code>

有没有一种方法可以做到这一点:
Dim el As XElement = XElement.Parse({variable containing text above})

如何让它评估表达式Integer.MaxValue?

3个回答

2

简短回答是不行的。编译器知道如何解析这个内容,并将您的源代码替换为类似于在C#代码中所做的内容。

测试代码:

Dim source As String = "a,s,d,f"
Dim ar As String() = source.Split(","c)
Dim el As XElement = <code>
                         <%= From s In ar Select s + "22" %>
                     </code>

反射代码:

Dim VB$CG$t_i4$S0 As Integer
Dim ar As String() = "a,s,d,f".Split(New Char() { ","c })
Dim VB$t_ref$S0 As New XElement(XName.Get("code", ""))
VB$t_ref$S0.Add(ar.Select(Of String, String)(New Func(Of String, String)(AddressOf Test._Lambda$__1)))
Dim el As XElement = VB$t_ref$S0

感谢您发布最终答案。您介意说一下您是如何学习这个的吗? - John Saunders
我使用反编译器来反编译我的程序集,并查看编译器对我的代码所做的操作。您可以在http://www.red-gate.com/products/reflector/找到它。 - epitka

1

不太容易。最接近的方法是使用CodeDOM生成一些代码 - 您需要生成一个包装器模块和一个带有ReturnFunction,然后将数据库中的表达式放入该Return中 - 编译它(并检查编译错误),运行它,并查看结果。总的来说,这将非常缓慢。


你知道有哪些文章或资源可以帮助那些想尝试这样事情的人吗? - CoderDennis
http://msdn.microsoft.com/en-us/library/y2k85ax6.aspx涵盖了CodeDOM。然而,它并没有详细介绍XML文字,因为那是VB特定的功能,所以你需要使用文字表达式 - http://msdn.microsoft.com/en-us/library/system.codedom.codesnippetexpression.aspx - Pavel Minaev

0

我认为关键是理解嵌入式表达式的工作原理。我已经将此作为单独的问题提出。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接