1

我正在从Win32_NetworkAdapterConfigurationC# 的类中收集所有网络适配器配置。我使用这个查询:

private String strDetailedInterfaces =
                       @"SELECT * 
                       FROM   Win32_NetworkAdapterConfiguration
                       WHERE  DHCPEnabled = 'TRUE'";

但是,在选择我用来连接到Internet的NetworkAdapter时,它就说,IPEnabled = false当我调用数组时IPAddresses,我得到了nullpointerexception(意味着array = null)。

我这样称呼地址:

ManagementObject choosen = (ManagementObject)eInterfacesConfig.Current;
String[] ipAddresses = (String[]) choosen["IPAddress"];
lblIP.Text = ipAddresses[0];

eInterfacesConfig是 aManagementObjectCollection.Enumerator并且选择的是当前ManagementObject的枚举数。

我尝试将标签 (lblIP) 的文本更改为数组中的第一个 IP 地址。但这是引发异常的地方。

有人可以解释为什么,也许可以指出我正确的方向吗?

4

1 回答 1

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 Gigabit Network Adapter。有两个 IP 地址分配给适配器。

阵列可能为空的另一个原因IPAddress是例如断开的无线网络适配器

因此,为了解决您的问题,NullReferenceException您必须检查 IPAddress数组是否为空(请参阅上面的代码)。使用该Description 属性来标识适配器配置。

于 2013-03-04T19:34:20.753 回答