如何在这种情况下检查null?

如何在这种情况下检查null?

问题描述:

大家好,



如何在此方法中检查ManagementObject mo2是否为空:



Hi all,

How to check if ManagementObject mo2 is null in this method:

static string[] GetUsbcomDevices()
      {
          ManagementObjectSearcher searcher2 = new ManagementObjectSearcher("SELECT * FROM Win32_PnPEntity");
          List<string> list = searcher2.Get().Cast<ManagementObject>().Select(mo2 => mo2["Name"].ToString()).Where(name => name.Contains("(COM")).ToList();
          string[] usbDevices = list.Distinct().OrderBy(s => s).ToArray();
          return usbDevices;
      }





谢谢,

Groover



Thanks,
Groover

如果搜索者包含空值,那么你可以很容易地忽略它们:

If the searcher is containing nulls, then you can ignore them quite easily:
List<string> list = searcher2.Get().Where(m => m != null).Cast<ManagementObject>().Select(mo2 => mo2["Name"].ToString()).Where(name => name.Contains("(COM")).ToList();



但是你不需要将集合强制转换为ManagementObjects,因为Get方法已经返回了它们的集合: MSDN [ ^ ]


这是解决方案:

this is the solution:
static string[] GetUsbcomDevices()
       {
           List<ManagementObject> listObj = new List<ManagementObject>();
           List<string> usbSerial = new List<string>();
           try
           {
               string query = "SELECT * FROM Win32_PnPEntity WHERE ConfigManagerErrorCode = 0";
               ManagementObjectSearcher searcher = new ManagementObjectSearcher(query);
               listObj = searcher.Get().Cast<ManagementObject>().ToList();
               searcher.Dispose();
           }
           catch (Exception ex)
           {
               MessageBox.Show(ex.ToString());
               usbSerial = new List<string>();
           }
           foreach (ManagementObject obj in listObj)
           {
               var targetObj = obj["Caption"];
               if (targetObj != null)
               {
                   string caption = targetObj.ToString();
                   if (caption.Contains("(COM"))
                   {
                       string name = caption.Substring(caption.LastIndexOf("(COM")).
                                                       Replace("(", string.Empty).
                                                       Replace(")", string.Empty);
                       usbSerial.Add(name);
                   }
               }
           }
           string[] usbDevices = usbSerial.Distinct().OrderBy(s => s).ToArray();
           return usbDevices;
       }





Groover



Groover