我的目标是获取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);
}
}
}
}
答案 0 :(得分:3)
此错误告诉您obj["IPAddress"]
正在返回object
,并且foreach
不知道如何遍历object
。
因此,您必须先将obj
转换为可迭代的集合:
String[] addresses = (String[])obj["IPAddress"];
foreach (string s in addresses)
{
Console.WriteLine(s);
}
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[]
类型。