public string GetNetworkAdapterName()
{
foreach (ManagementObject queryObj in name.Get())
{
bool physicaladapter = Convert.ToBoolean(queryObj["PhysicalAdapter"]);
if (physicaladapter == true)
{
return Convert.ToString(queryObj["Name"]);
}
}
return null;
}
我怎样才能得到foreach的第一个,第二个元素? GetNetworkadapterName(1)无效 感谢
答案 0 :(得分:4)
目前还不清楚你要做什么,但是如果想让调用者找到所有网络适配器,你可以使用LINQ(如果你使用的是.NET 3.5)或更高):
public IEnumerable<string> GetNetworkAdapterNames()
{
return name.Get()
.Cast<ManagementObject>() // May not be necessary
.Where(q => Convert.ToBoolean(q["PhysicalAdapter"]))
.Select(q => Convert.ToString(q["Name"]));
}
如果你没有使用.NET 3.5,你可以使用迭代器块来手动执行相同的操作。
然后调用者可以决定如何处理适配器名称序列 - 他们可以找到n th ,或者将它们全部打印出来等。这样做的好处是,如果他们 想要访问多个元素,他们可以有效地这样做。
获取n th 值将始终进行迭代,但这可以使用便捷方法隐藏,例如LINQ的ElementAt
方法:
string secondAdapterName = GetNetworkAdapterNames().ElementAt(1);
我坚信将“找到n th 值”与“查找所有网络适配器名称”的问题混合起来是一个坏主意。
答案 1 :(得分:1)
你可以使用这样的整数:
int i = 0;
foreach (ManagementObject queryObj in name.Get())
{
i++;
if(i < 3)
{/*get element*/}
bool physicaladapter = Convert.ToBoolean(queryObj["PhysicalAdapter"]);
if (physicaladapter == true)
{
return Convert.ToString(queryObj["Name"]);
}
}
return null;
答案 2 :(得分:1)
public string GetNetworkAdapterName(int index)
{
ManagementObject[] queryObjects = name.Get();
if(index > queryObjects.Length)
return String.Empty;
ManagementObject queryObj = queryObjects[index];
if(Convert.ToBoolean(queryObj["PhysicalAdapter"]))
return queryObj["Name"].toString();
else
return String.Empty;
}
答案 3 :(得分:-1)
当前代码将始终返回第一个物理适配器。修改它以允许你告诉它返回哪个,尝试这样的事情:
public string GetNetworkAdapterName(int Ordinal)
{
int i = 1;
foreach (ManagementObject queryObj in name.Get())
{
bool physicaladapter = Convert.ToBoolean(queryObj["PhysicalAdapter"]);
if (physicaladapter == true && i == Ordinal)
{
return Convert.ToString(queryObj["Name"]);
} else if (physicaladapter == true) {
i++;
}
}
return null;
}