2010-02-04 83 views
2

以下输出产生一个没有关闭xml标签的字符串。vb.net string concatenation string + function output + string = string + function output and no more

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()函数返回字符串。

回答

1

为元奈特说,但我会建议使用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() 
+0

所以我问为什么代码是做某事,你建议使用一个stringbuilder? 代码为每个用户执行一次,使用stringbuilder获得性能好处不会那么有用。 最终的字符串不会超过1000个字符。 – CodingBarfield 2010-02-08 17:07:45

+0

@Barfieldmv:对,就像我说的,我赞同Meta-Knight。它在我看来像是你有愚蠢的追加问题,你的字符串可能是因为打字问题。使用StringBuilder可以通过确保输出绝对是一个字符串来帮助缓解这种情况。除此之外,你不应该使用+连接(正如其他人所说的)。在这种情况下,我不建议使用StringBuilder来提高性能。我建议它为了类型安全。 – 2010-02-08 17:20:02

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()不返回字符串,并且对+运算符做了一些奇怪的事情。您可以使用&运算符来确保只执行字符串连接。

+0

我会同意 - 替换“+”与“ - ”字符串连接,或者你可以用一些疏忽造成数字另外某个时候结束。 – xpda 2010-02-06 16:32:24

0

您可以使用string.concat

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

,或者作为元奈特提到,&代替的+。 (它总是会在连接前转换为字符串。)

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