如何在不使用TryCatch的情况下检测.net中的WMI ManagementObject查询结果是否为Nothing?

2026-05-06 09:361阅读0评论SEO基础
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计485个文字,预计阅读时间需要2分钟。

如何在不使用Try/Catch的情况下检测.net中的WMI ManagementObject查询结果是否为Nothing?

在我的程序中,我使用WMI接口查询有关正在运行程序的硬件信息。然后将这些信息放入一个列表中,以便于后续展示。目前,还没有其他更多信息。暂时为止,这种方法已经很好地解决了问题。

在我的程序中,我使用WMI接口来查询有关运行程序的硬件的大量信息.然后我将这些信息放入一个列表中,以便稍后显示它,但目前还没有其他更多的信息.到目前为止,这种方法已经很好地解决了,但是有一个主要问题:有时查询是/返回(不知道哪一个!)没有,导致NullReferenceException.

现在,显然我可以将它包装在Try / Catch中,并以我的快乐方式.但是,我想避免这样做,因为我将查询数百位信息,其中数百个可能会导致异常.这只是草率的编程,并且正在大大减慢我的程序!

我的问题是:我要检查什么才能使用If而不是Try?我将把我当前的代码放在下面,然后列出我已经尝试过的解决方案.

Public Shared Function GetSomeInfo() As List(Of String) Dim ret As New List(Of String) Dim sq As New Management.SelectQuery("Win32_Processor") Dim mos As New Management.ManagementObjectSearcher(sq) For Each info As Management.ManagementObject In mos.Get() ret.Add(TryQuery(info, "Name")) ret.Add(TryQuery(info, "Caption")) 'this query may result in Nothing somewhere... Next Return ret End Function Private Shared Function TryQuery(ByRef info As Management.ManagementObject, ByVal strID As String) As String Try Return strID & ": " & info(strID).ToString 'exception obviously thrown here...but WHERE? Catch ex As NullReferenceException Return String.Empty Catch ex As Management.ManagementException Return String.Empty End Try End Function

所以,这是我尝试过的尝试和使用此尝试:

如何在不使用Try/Catch的情况下检测.net中的WMI ManagementObject查询结果是否为Nothing?

如果Not info is Nothing那么……仍然会导致一些未被捕获的异常

如果不信息(strID)则没有那么……在某处仍然有例外

如果不是info.Equals(Nothing)那么……绝望

如果不是信息(strID).ToString是什么……

本文共计485个文字,预计阅读时间需要2分钟。

如何在不使用Try/Catch的情况下检测.net中的WMI ManagementObject查询结果是否为Nothing?

在我的程序中,我使用WMI接口查询有关正在运行程序的硬件信息。然后将这些信息放入一个列表中,以便于后续展示。目前,还没有其他更多信息。暂时为止,这种方法已经很好地解决了问题。

在我的程序中,我使用WMI接口来查询有关运行程序的硬件的大量信息.然后我将这些信息放入一个列表中,以便稍后显示它,但目前还没有其他更多的信息.到目前为止,这种方法已经很好地解决了,但是有一个主要问题:有时查询是/返回(不知道哪一个!)没有,导致NullReferenceException.

现在,显然我可以将它包装在Try / Catch中,并以我的快乐方式.但是,我想避免这样做,因为我将查询数百位信息,其中数百个可能会导致异常.这只是草率的编程,并且正在大大减慢我的程序!

我的问题是:我要检查什么才能使用If而不是Try?我将把我当前的代码放在下面,然后列出我已经尝试过的解决方案.

Public Shared Function GetSomeInfo() As List(Of String) Dim ret As New List(Of String) Dim sq As New Management.SelectQuery("Win32_Processor") Dim mos As New Management.ManagementObjectSearcher(sq) For Each info As Management.ManagementObject In mos.Get() ret.Add(TryQuery(info, "Name")) ret.Add(TryQuery(info, "Caption")) 'this query may result in Nothing somewhere... Next Return ret End Function Private Shared Function TryQuery(ByRef info As Management.ManagementObject, ByVal strID As String) As String Try Return strID & ": " & info(strID).ToString 'exception obviously thrown here...but WHERE? Catch ex As NullReferenceException Return String.Empty Catch ex As Management.ManagementException Return String.Empty End Try End Function

所以,这是我尝试过的尝试和使用此尝试:

如何在不使用Try/Catch的情况下检测.net中的WMI ManagementObject查询结果是否为Nothing?

如果Not info is Nothing那么……仍然会导致一些未被捕获的异常

如果不信息(strID)则没有那么……在某处仍然有例外

如果不是info.Equals(Nothing)那么……绝望

如果不是信息(strID).ToString是什么……