![github-actions[bot]](/assets/img/avatar_default.png)
* Add vbnet to rule S3063 * Add adoc for CS/VB * Add exceptions * Add invocations exceptions * Addressed PR comments * Semplifications, better wording on the descriptions * Small description fix * Add indexer and .Length expression exceptions and fix description * sub-list to inline * Fix typos --------- Co-authored-by: cristian-ambrosini-sonarsource <cristian-ambrosini-sonarsource@users.noreply.github.com> Co-authored-by: Cristian Ambrosini <cristian.ambrosini@sonarsource.com>
49 lines
1.4 KiB
Plaintext
49 lines
1.4 KiB
Plaintext
`StringBuilder` instances that never build a `string` clutter the code and worse are a drag on performance. Either they should be removed, or the missing `ToString()` call should be added.
|
|
|
|
== Noncompliant Code Example
|
|
|
|
[source,vbnet]
|
|
----
|
|
Public Sub DoSomething(ByVal strings As List(Of String))
|
|
Dim sb As StringBuilder = New StringBuilder() ' Noncompliant
|
|
sb.Append("Got: ")
|
|
|
|
For Each str As String In strings
|
|
sb.Append(str).Append(", ")
|
|
Next
|
|
End Sub
|
|
----
|
|
|
|
== Compliant Solution
|
|
|
|
[source,vbnet]
|
|
----
|
|
Public Sub DoSomething(ByVal strings As List(Of String))
|
|
For Each str As String In strings
|
|
Next
|
|
End Sub
|
|
----
|
|
or
|
|
[source,vbnet]
|
|
----
|
|
Public Sub DoSomething(ByVal strings As List(Of String))
|
|
Dim sb As StringBuilder = New StringBuilder()
|
|
sb.Append("Got: ")
|
|
|
|
For Each str As String In strings
|
|
sb.Append(str).Append(", ")
|
|
Next
|
|
|
|
My.Application.Log.WriteEntry(sb.ToString())
|
|
End Sub
|
|
----
|
|
|
|
== Exceptions
|
|
|
|
No issue is reported when `StringBuilder` is:
|
|
|
|
* Accessed through `sb.CopyTo()`, `sb.GetChunks()`, `sb.Length`, or `sb(index)`.
|
|
* Passed as a method argument, on the grounds that it will likely be accessed through a `ToString()` invocation there.
|
|
* Passed in as a parameter to the current method, on the grounds that the callee will materialize the string.
|
|
* Retrieved by a custom function (`Dim sb As StringBuilder = GetStringBuilder()`).
|
|
* Returned by the method. |