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 TrueFalse.

如果您打开 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'.