如何在这种情况下检查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