2

次の出力は、終了xmlタグのない文字列を生成します。

m_rFlight.Layout = m_rFlight.Layout + "<G3Grid:Spots>" + Me.gvwSpots.LayoutToString() + "</G3Grid:Spots>"

この次のコードは正しく機能します

m_rFlight.Layout = m_rFlight.Layout + "<G3Grid:Spots>" + Me.gvwSpots.LayoutToString()
m_rFlight.Layout = m_rFlight.Layout + "</G3Grid:Spots>" 'add closing tag

ここで何が起こっているのですか、最初の例が機能せず、2番目の例が機能しない理由は何ですか?

gvwSpots.LayoutToString()関数は文字列を返します。

4

3 に答える 3

1

あなたのコードと同等であるはずの次のコードを考えてみてください。

Dim someString As String = String.Empty

someString = someString + "<G3Grid:Spots>" + "SomeValue" + "</G3Grid:Spots>"

Console.WriteLine(someString)

someString = String.Empty
someString = someString + "<G3Grid:Spots>" + "SomeValue"
someString = someString + "</G3Grid:Spots>"

Console.WriteLine(someString)

私はそれをテストしましたが、どちらの場合も出力は次のとおりです。<G3Grid:Spots>SomeValue</G3Grid:Spots>

同じ結果が得られない場合m_rFlight.Layoutは、文字列ではないかMe.gvwSpots.LayoutToString()、文字列を返さず、+演算子で何か奇妙なことをしていることが原因です。代わりに&演算子を使用して、文字列の連結のみが実行されるようにすることができます。

于 2010-02-04T16:02:32.393 に答える
1

Meta-Knightが言ったように、StringBuilderクラスの使用をお勧めすることを除いて:

Dim myString As New System.Text.StringBuilder

myString.Append("<G3Grid:Spots>")
myString.Append(Me.gvwSpots.LayoutToString())
myString.Append("</G3Grid:Spots>")

m_rFlight.Layout = myString.ToString()
于 2010-02-04T16:08:30.257 に答える
0

string.concatを使用できます

m_rFlight.Layout = string.concat(m_rFlight.Layout, "<G3Grid:Spots>",_
  Me.gvwSpots.LayoutToString(), "</G3Grid:Spots>")

または、Meta-Knightが述べたように、+の代わりに&。(連結前に常に文字列に変換されます。)

m_rFlight.Layout &= "<G3Grid:Spots>" & Me.gvwSpots.LayoutToString() & "</G3Grid:Spots>"
于 2010-02-06T16:38:52.503 に答える