我正试图在我的代码中改进FxCop合规性(这是有史以来第一次),但我有点陷入道德问题.我有一个方法GetText()从远程服务器返回一个字符串,但在某些情况下可以抛出异常.这就是为什么我还
我认为这种结构是完全可以接受的,考虑到即使微软也这样做(例如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变体改进了代码可用性.
嗯,我想每个人都讨厌太多的太空.两个已经太多了.虽然在你的情况下有很多方法,他们都遵循相同的模式听起来不是一个真正的问题.您可以选择不遵守Microsoft的Try *方法模式.
而不是布尔值,为什么不成功返回字符串,如果失败则返回Nothing / Empty?
然后,您可以使用String.IsNullOrEmpty(resultText)测试TryGetText输出.
事实上,这是更多的代码,但它确实解决了警告(如果这真的是你所追求的).