当前位置 : 主页 > 编程语言 > c语言 >

vb.net – ‘TryAction()’方法是邪恶的吗?

来源:互联网 收集:自由互联 发布时间:2021-06-24
我正试图在我的代码中改进FxCop合规性(这是有史以来第一次),但我有点陷入道德问题.我有一个方法GetText()从远程服务器返回一个字符串,但在某些情况下可以抛出异常.这就是为什么我还
我正试图在我的代码中改进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变体改进了代码可用性.

嗯,我想每个人都讨厌太多的太空.两个已经太多了.虽然在你的情况下有很多方法,他们都遵循相同的模式听起来不是一个真正的问题.
您可以选择不遵守Microsoft的Try *方法模式.

而不是布尔值,为什么不成功返回字符串,如果失败则返回Nothing / Empty?
然后,您可以使用String.IsNullOrEmpty(resultText)测试TryGetText输出.

事实上,这是更多的代码,但它确实解决了警告(如果这真的是你所追求的).

网友评论