.net - 简化字符串异常检查

标签 .net vb.net string winforms try-catch

在我的代码中,我将运行一个进程并检索部分标准错误输出(一个数字)以引发一个发送进度数字的事件。

有时我在“.First”方法的这一行有一个异常,因为字符串没有要分割的东西:

out = mp3gain_For_NonTag.StandardError.ReadLine.Trim.Split("%").First

问题是我想在不执行 Try/Catch 的情况下添加必要的检查以避免该异常,因为在我的速度测试中我注意到此过程中的 try/catch 会大大降低性能。

我想简化执行必要检查但不捕获任何异常的代码(到目前为止,我添加的检查将比 try/catch 执行得更快)。

代码如下:

Private Shared Sub Run_MP3Gain_NotTag()

    mp3gain_For_NonTag.Start() ' Run process

    Dim out as string  = mp3gain_For_NonTag.StandardError.ReadToEnd

    While Not mp3gain_For_NonTag.HasExited

        If Not String.IsNullOrEmpty(out) Then
            ' This would generate numbers between 1 to 100
            out = mp3gain_For_NonTag.StandardError.ReadLine.Trim.Split("%").First
        End If

        If Integer.TryParse(out, 0) Then
            RaiseEvent MP3Gain_Progress(out)
        End If

    End While

    RaiseEvent MP3Gain_Exited()

End Sub

...关于其他信息,这是我不想做的示例,我可以说在修改后的代码中添加一个 try catch,即使没有捕获任何异常类型也会降低性能很多:

Private Shared Sub Run_MP3Gain_NotTag()

    mp3gain_For_NonTag.Start() ' Run process

    Dim out as string = mp3gain_For_NonTag.StandardError.ReadToEnd 

    While Not mp3gain_For_NonTag.HasExited

        Try
            out = mp3gain_For_NonTag.StandardError.ReadLine.Trim.Split("%").First
            RaiseEvent MP3Gain_Progress(out)
        Catch : End Try

    End While

    RaiseEvent MP3Gain_Exited()

End Sub

最佳答案

我认为.FirstOrDefault()这里可能就是您的答案。

又看了一眼。我不认为你的问题是第一种方法。 First 抛出的异常是一个症状。您的问题是您通过读取到流的末尾来设置 out,然后您通过尝试读取另一行来运行 Split,这将不返回任何内容,因此出现异常。只需拆分 out,一切都应该没问题:

Dim out as string  = mp3gain_For_NonTag.StandardError.ReadToEnd

While Not mp3gain_For_NonTag.HasExited

    If Not String.IsNullOrEmpty(out) Then
        ' This would generate numbers between 1 to 100
        out = out.Trim.Split("%").First()
    End If

关于.net - 简化字符串异常检查,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19281528/

相关文章:

c# - 如何改进这种异常重试场景?

.net - 编程华为E220

vb.net - 为每个循环遍历列表时删除列表中的项目

javascript - 简单的 Javascript 函数不适用于 .ascx 文件

Java if 语句很愚蠢(简单)

c# - 将 Xml 反序列化为对象时出错 - xmlns ='' 不是预期的

VB.NET Microsoft.Reporting.WinForms.ReportViewer 未定义

c++ - 在不使用 Arduino 中的 String 对象的情况下将二进制数据转换为其等效的 ASCII

c - 将数组值传递给另一个函数时出现缓冲区溢出问题

c# - 如何对 CheckedListBox 进行排序