我对我希望是一个简单的问题感到困惑。我试图嵌入一个简单的公式,增加一个变量,作为XML文档的“行号”。在visual basic中编写文字XML。这是代码的样子:
<%= From d In orderData
Select <ItemOut quantity=<%= d.OrderQuantity %> lineNumber=<%= i %>>
<ItemID>
<SupplierPartID><%= d.VendorPartNo %></SupplierPartID>
</ItemID>
<ItemDetail>
<UnitPrice>
<Money currency="USD"><%= d.PricePerPackage %></Money>
</UnitPrice>
<Description xml:lang="en"><%= d.Description %></Description>
<UnitOfMeasure><%= d.OrderUOM %></UnitOfMeasure>
</ItemDetail>
<%= i = i + 1 %>
</ItemOut>
%>
我期望OrderData中d的每次迭代都勾选i + 1,但是,它只是返回“false”。请在此处查看输出XML:
<ItemOut quantity="1" lineNumber="1">
<ItemID>
<SupplierPartID>99999</SupplierPartID>
</ItemID>
<ItemDetail>
<UnitPrice>
<Money currency="USD">0.00</Money>
</UnitPrice>
<Description xml:lang="en">Tub and Tile Caulk Biscuit</Description>
<UnitOfMeasure>cs</UnitOfMeasure>
</ItemDetail>false</ItemOut>
<ItemOut quantity="1" lineNumber="1">
<ItemID>
<SupplierPartID>999999</SupplierPartID>
</ItemID>
<ItemDetail>
<UnitPrice>
<Money currency="USD">0.00</Money>
</UnitPrice>
<Description xml:lang="en">Tub and Tile Caulk Almond</Description>
<UnitOfMeasure>cs</UnitOfMeasure>
</ItemDetail>false</ItemOut>
有可能做这种事吗?我甚至尝试过调用函数:
lineNumber=<%= incrementI(i) %>>
但这也会导致“假”作为输出。我在这里错过了什么? 感谢您的帮助!
Visual Studio 2013
Edit-- 这是我所指的功能:
Private Function incrementI(i As Integer)
Return i = i + 1
End Function
答案 0 :(得分:0)
如果您将IncrementI
定义为通过引用而不是按值接受其参数,则可以这样写:
Sub Main()
Dim j As Integer = 0
Dim x = <sample><thing><%= IncrementI(j) %></thing><thing><%= IncrementI(j) %></thing></sample>
Console.WriteLine(x)
Console.ReadLine()
End Sub
Function IncrementI(ByRef i As Integer) As Integer
i = i + 1 'This is now a statement rather than an expression, so its assignment
Return i
End Function
生成此XML:
<sample>
<thing>1</thing>
<thing>2</thing>
</sample>
正如评论中所指出的,Visual Basic使用=
进行赋值和相等。如果您在需要表达式的上下文中使用它,您将获得返回True
或False
的相等比较。
如果你打开Option Strict
并定义函数返回类型,那么编译器会帮助你看到你的函数没有修复问题:
'Broken code
Private Function incrementI(i As Integer) as Integer
Return i = i + 1
End Function
当Option Strict打开时,上面会产生错误
Option Strict On禁止从“Boolean”到“Integer”的隐式转换。