使用foreach循环从System.String []打印值

时间:2014-02-26 11:36:40

标签: c# arrays string wmi

我的目标是获取IP地址和NIC名称, 这是我的示例代码,我想获取类型为System.String[]的IPAddress对象的值,我看到很多网络帖子并尝试复制他们的代码foreach loop,但它是不适合我,可能是什么问题?

我仍然习惯foreach循环,因为这本周对我来说是新的

foreach错误突出显示我的错误:

  

foreach语句不能对'object'类型的变量进行操作,因为'object'不包含'GetEnumerator'的公共定义

ManagementObjectSearcher searcher = new ManagementObjectSearcher("select * from Win32_NetworkAdapterConfiguration ");

int ram = 1;
foreach (ManagementObject obj in searcher.Get())
{
     if (obj["MACAddress"] != null)
     {
         Console.WriteLine(String.Format("NIC #{0}:", ram));

         if (obj["IPAddress"] != null) // IPAddress is of type System.String[]
         {
             foreach (string s in obj["IPAddress"])
             { 
                 Console.WriteLine(s);         
             }   
         }
     }
}

3 个答案:

答案 0 :(得分:3)

此错误告诉您obj["IPAddress"]正在返回object,并且foreach不知道如何遍历object

因此,您必须先将obj转换为可迭代的集合:

 String[] addresses = (String[])obj["IPAddress"];
 foreach (string s in addresses)
 { 
     Console.WriteLine(s);         
 }

取自msdn documentation

  

foreach语句为数组中的每个元素或实现System.Collections.IEnumerable或System.Collections.Generic.IEnumerable接口的对象集合重复一组嵌入式语句。

因此,foreach类型不支持object

答案 1 :(得分:1)

首先需要将其转换为字符串数组,然后按以下方式更改代码。

if (obj["IPAddress"] != null) // IPAddress is of type System.String[]
     {
        string[] newStringArray = (String[])obj["IPAddress"];
         foreach (string s in newStringArray )
         { 
             Console.WriteLine(s);         
         }
     }

希望这有助于...... !!!

答案 2 :(得分:0)

我认为您需要明确地将obj["IPAddress"]投射到String[]类型。