【发布时间】:2012-06-15 19:08:32
【问题描述】:
我正在尝试改进我的代码中的 FxCop 合规性(这是有史以来的第一次),但我有点陷入道德问题。我有一个方法GetText() 从远程服务器返回一个字符串,但在某些情况下会抛出异常。这就是为什么我还有一个方法TryGetText(ByRef text As String),它返回一个布尔值,指示调用是否成功。如果为 true,则将返回值赋给 text 变量。
我认为这种结构是完全可以接受的,考虑到即使是微软也这样做(例如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 变体提高了代码可用性。
【问题讨论】:
标签: vb.net pass-by-reference fxcop