私は自分のコードでFxCopコンプライアンスを改善しようとしていますが(初めて)、倫理的な問題に少し立ち往生しています。GetText()
リモートサーバーから文字列を返すメソッドがありますが、特定の状況で例外をスローする可能性があります。TryGetText(ByRef text As String)
そのため、呼び出しが成功したかどうかを示すブール値を返すメソッドもあります。trueの場合、戻り値はテキスト変数に割り当てられます。
Microsoftでさえもそうしていることを考えると、この構造は完全に受け入れられると思いました(例Integer.TryParse
)。FxCopは、「あなたは参照で通り過ぎてはならない!」と口述して、私を怒らせています。
この警告を回避するために(そしてそれらのかなりの数があります)、パラメーターをStringBuilderに置き換えました。しかし、現在は準拠しているにもかかわらず、コードが実際に改善されたとは思いません。
前:
Public Function TryGetText(ByRef text As String) As Boolean
Dim command As New GetTextCommand(Me)
Dim result As CommandResult = ProcessCommand(command, True)
If result.CommandStatus <> Constants.Status.Failed Then
text = result.Text
Return True
Else
Return False
End If
End Function
後:
Public Function TryGetText(builder As Text.StringBuilder) As Boolean
Dim command As New GetTextCommand(Me)
Dim result As CommandResult = ProcessCommand(command, True)
If result.CommandStatus <> Constants.Status.Failed Then
builder.Clear()
builder.Length = result.Text.Length
builder.Append(result.Text)
Return True
Else
Return False
End If
End Function
これはByRefの許容できる使用法ですか、それともstringbuilderの代替手段を使用する必要がありますか?この構成を使用するすべてのメソッドで、この警告を抑制することにあまり満足していません。stringbuilderバリアントがコードの使いやすさを改善したようにも感じません。