vb.net строка конкатенации строк + вывод функции + строка = строка + вывод функции и не более - PullRequest
2 голосов
/ 04 февраля 2010

Следующий вывод создает строку без закрывающего тега 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

Что здесь происходит, по какой причине первый пример не работает, а второй работает?

Функция gvwSpots.LayoutToString () возвращает строку.

Ответы [ 3 ]

1 голос
/ 04 февраля 2010

Как сказал 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()
1 голос
/ 04 февраля 2010

Рассмотрим следующий код, который должен быть эквивалентным вашему коду:

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() не возвращает строку и делает что-то странное с оператором +. Вместо этого вы можете использовать оператор &, чтобы убедиться, что выполняется только конкатенация строк.

0 голосов
/ 06 февраля 2010

Вы можете использовать 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>"
...