Visual Basic XML 文字嵌入式表达式 - 我可以做简单的数学运算吗?
Visual Basic XML Literals Embedded Expressions - Can I do simple math?
我被我希望是一个简单的问题难住了。我正在尝试嵌入一个简单的公式来递增变量以充当 XML 文档的 "line number"。在 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) %>>
但这也会导致 "false" 作为输出。我在这里错过了什么?
预先感谢您的帮助!
Visual Studio 2013
编辑--
这是我指的函数:
Private Function incrementI(i As Integer)
Return i = i + 1
End Function
如果你定义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 使用 =
进行赋值和相等。如果您在需要 表达式 的上下文中使用它,您将获得 returns True
或 False
.
如果您打开 Option Strict
并定义函数 return 类型,那么编译器会帮助您看到您的函数没有解决问题:
'Broken code
Private Function incrementI(i As Integer) as Integer
Return i = i + 1
End Function
当 Option Strict 开启时,以上会产生错误
Option Strict On disallows implicit conversions from 'Boolean' to 'Integer'.
我被我希望是一个简单的问题难住了。我正在尝试嵌入一个简单的公式来递增变量以充当 XML 文档的 "line number"。在 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) %>>
但这也会导致 "false" 作为输出。我在这里错过了什么? 预先感谢您的帮助!
Visual Studio 2013
编辑-- 这是我指的函数:
Private Function incrementI(i As Integer)
Return i = i + 1
End Function
如果你定义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 使用 =
进行赋值和相等。如果您在需要 表达式 的上下文中使用它,您将获得 returns True
或 False
.
如果您打开 Option Strict
并定义函数 return 类型,那么编译器会帮助您看到您的函数没有解决问题:
'Broken code
Private Function incrementI(i As Integer) as Integer
Return i = i + 1
End Function
当 Option Strict 开启时,以上会产生错误
Option Strict On disallows implicit conversions from 'Boolean' to 'Integer'.