9

System.Netを使用して参照しているコードがSystem.Net.NetworkInformationあり、ネットワーク接続名のリストが生成されます。

すべてが正常に機能しているように見えますが、このコードのクラスを作成し、値をアイテムにエクスポートするとlistbox1、ネットワーク接続名は1つしかありませんでしたが、実際には4つあります。

どうすればこの問題を解決できますか?

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>です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 に答える