我正在从C#中的Win32_NetworkAdapterConfiguration
类收集所有网络适配器配置。
我使用这个查询:
private String strDetailedInterfaces =
@"SELECT *
FROM Win32_NetworkAdapterConfiguration
WHERE DHCPEnabled = 'TRUE'";
但是,当选择我用来连接到互联网的网络适配器时,它会显示IPEnabled = false
,当我用IPAddresses
调用数组时,我得到nullpointerexception(意味着数组= null)
我打电话给这样的地址:
ManagementObject choosen = (ManagementObject)eInterfacesConfig.Current;
String[] ipAddresses = (String[]) choosen["IPAddress"];
lblIP.Text = ipAddresses[0];
eInterfacesConfig
是ManagementObjectCollection.Enumerator
和
选择是枚举器中的当前ManagementObject
。
我尝试将标签(lblIP)的文本更改为数组中的第一个Ip地址。但这就是异常抛出的地方。
有人可以解释原因,也许可以指出我正确的方向吗?
答案 0 :(得分:1)
以下查询返回两个Win32_NetworkAdapterConfiguration
个对象
在我的Windows 8机器上:
ManagementObjectSearcher query =
new ManagementObjectSearcher("SELECT * FROM Win32_NetworkAdapterConfiguration WHERE DHCPEnabled ='TRUE'");
ManagementObjectCollection queryCollection = query.Get();
queryCollection = query.Get();
foreach (ManagementObject currentConfig in queryCollection)
{
string[] addresses = (string[])currentConfig["IPAddress"];
Console.Out.WriteLine(currentConfig["Description"]);
if (addresses != null)
{
foreach (var addr in addresses)
{
Console.Out.WriteLine(addr);
}
}
}
第一个适配器配置适用于 Microsoft内核调试网络适配器。
此适配器用于远程内核调试。 DHCPEnabled
属性
这个适配器是TRUE
。但是没有IP地址
分配给此适配器。这就是IPAddress
数组为空的原因。
第二个适配器配置适用于我的 Intel千兆网络适配器。那里 是分配给适配器的两个IP地址。
IPAddress
数组可能为null的另一个原因是
例如断开连接的无线网络适配器。
所以,为了解决你的NullReferenceException
,你必须检查
IPAddress
数组为null(请参阅上面的代码)。使用Description
用于标识适配器配置的属性。