9

我有代码,它正在使用System.NetSystem.Net.NetworkInformation引用,它会生成我的网络连接名称列表。

一切似乎都很好并且工作正常,但是当我编写了一个此类代码并将值导出到listbox1添加的项目时,我只有一个网络连接名称,但实际上我有四个。

我怎么解决这个问题?

private void button1_Click(object sender, EventArgs e)
{
    Adapters obj = new Adapters();
    var value = obj.net_adapters();
    listBox1.Items.Add(value);
}

public class Adapters
{
    public string net_adapters()
    {
        string value = string.Empty;
        foreach (NetworkInterface nic in NetworkInterface.GetAllNetworkInterfaces())
        {
            value = nic.Name;
        }
        return value;
    }
}
4

3 回答 3

16

我会修改您当前拥有的代码:

public string net_adapters() 
{ 
    string value = string.Empty; 
    foreach (NetworkInterface nic in NetworkInterface.GetAllNetworkInterfaces()) 
    { 
        // bug in your original code right here is `=`
        // you proably meant to do something like value += ", " + nic.Name
        // which would not work well with listbox Items collection
        value = nic.Name; 
    } 
    return value; 
} 

变成这样:

public System.Collections.Generic.List<String> net_adapters() 
{ 
    List<String> values = new List<String>();
    foreach (NetworkInterface nic in NetworkInterface.GetAllNetworkInterfaces()) 
    { 
        values.Add(nic.Name);
    } 
    return values; 
}

一种更奇特的方式(尽管它可能无关紧要,因为 GetAllNetworkIntefaces 可能会阻塞,直到它有一个完整的列表)是使用IEnumerable<T>and yield return

public IEnumerable<String> net_adapters() 
{ 
    foreach (NetworkInterface nic in NetworkInterface.GetAllNetworkInterfaces()) 
    { 
        yield return nic.Name;
    } 
    yield break;
}

无论哪种方式,您都会像这样使用它:

var obj = new Adapters();    
var values = obj.net_adapters();
listBox1.ItemsSource = values;

(附带说明,我建议您使用.NET Framework 命名指南

于 2012-07-26T20:56:16.787 回答
3

您只返回最后一项value = nic.Name;您应该使用数组或列表来返回所有项目

public List<string> net_adapters()
{
     List<string> values = new List<string>();
     foreach (NetworkInterface nic in NetworkInterface.GetAllNetworkInterfaces())
     {
         values.Add(nic.Name);
     }
     return values;
}
于 2012-07-26T20:52:33.450 回答
0

复制和粘贴https://msdn.microsoft.com/en-us/library/system.net.networkinformation.networkinterface(v=vs.110).aspx

public static void ShowNetworkInterfaces()
{
IPGlobalProperties computerProperties = IPGlobalProperties.GetIPGlobalProperties();
NetworkInterface[] nics = NetworkInterface.GetAllNetworkInterfaces();
Console.WriteLine("Interface information for {0}.{1}     ",
        computerProperties.HostName, computerProperties.DomainName);
if (nics == null || nics.Length < 1)
{
    Console.WriteLine("  No network interfaces found.");
    return;
}

Console.WriteLine("  Number of interfaces .................... : {0}", nics.Length);
foreach (NetworkInterface adapter in nics)
{
    IPInterfaceProperties properties = adapter.GetIPProperties();
    Console.WriteLine();
    Console.WriteLine(adapter.Description);
    Console.WriteLine(String.Empty.PadLeft(adapter.Description.Length,'='));
    Console.WriteLine("  Interface type .......................... : {0}", adapter.NetworkInterfaceType);
    Console.WriteLine("  Physical Address ........................ : {0}", 
               adapter.GetPhysicalAddress().ToString());
    Console.WriteLine("  Operational status ...................... : {0}", 
        adapter.OperationalStatus);
    string versions ="";

    // Create a display string for the supported IP versions. 
    if (adapter.Supports(NetworkInterfaceComponent.IPv4))
    {
         versions = "IPv4";
     }
    if (adapter.Supports(NetworkInterfaceComponent.IPv6))
    {
        if (versions.Length > 0)
        {
            versions += " ";
         }
        versions += "IPv6";
    }
    Console.WriteLine("  IP version .............................. : {0}", versions);
    ShowIPAddresses(properties);

    // The following information is not useful for loopback adapters. 
    if (adapter.NetworkInterfaceType == NetworkInterfaceType.Loopback)
    {
        continue;
    }
    Console.WriteLine("  DNS suffix .............................. : {0}", 
        properties.DnsSuffix);

    string label;
    if (adapter.Supports(NetworkInterfaceComponent.IPv4))
    {
        IPv4InterfaceProperties ipv4 = properties.GetIPv4Properties();
        Console.WriteLine("  MTU...................................... : {0}", ipv4.Mtu);
        if (ipv4.UsesWins)
        {

            IPAddressCollection winsServers = properties.WinsServersAddresses;
            if (winsServers.Count > 0)
            {
                label = "  WINS Servers ............................ :";
                ShowIPAddresses(label, winsServers);
            }
        }
    }

    Console.WriteLine("  DNS enabled ............................. : {0}", 
        properties.IsDnsEnabled);
    Console.WriteLine("  Dynamically configured DNS .............. : {0}", 
        properties.IsDynamicDnsEnabled);
    Console.WriteLine("  Receive Only ............................ : {0}", 
        adapter.IsReceiveOnly);
    Console.WriteLine("  Multicast ............................... : {0}", 
        adapter.SupportsMulticast);
    ShowInterfaceStatistics(adapter);

    Console.WriteLine();
}
于 2015-07-29T10:26:46.673 回答