C#方法foreach

时间:2011-02-23 07:38:27

标签: c# methods

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)无效 感谢

4 个答案:

答案 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;
    }