编辑对象列表

时间:2013-05-17 17:42:44

标签: c#

我有一个对象列表。我的对象是NetworkAdapter,代表我机器上的网卡。此网卡具有属性ID,例如:{1106B232-363f-417F-9DC9-643BB02BEDE2},当然还有IP地址,名称等。

构造函数:

   public NetworkAdapter(LivePacketDevice packetDevice)
        {
            livePacketDevice = packetDevice;
        }

班级成员:

public string Name { get; set; }
public string ID { get; set; }
public string Description { get; set; }
public string IPAddress { get; set; }
private string gatewayIpAddress;
public string Speed { get; set; }
public string NetworkInterfaceType { get; set; }
public string MacAddress { get; set; }
private LivePacketDevice livePacketDevice;
public PacketDevice PacketDevice { get { return livePacketDevice; } }

获取所有机器适配器的方法:

public static NetworkAdapter[] getAll()
{
    List<NetworkAdapter> list = new List<NetworkAdapter>();
    foreach (NetworkInterface adapter in NetworkInterface.GetAllNetworkInterfaces())
        foreach (UnicastIPAddressInformation uniCast in adapter.GetIPProperties().UnicastAddresses)
        {
            if (!System.Net.IPAddress.IsLoopback(uniCast.Address) && uniCast.Address.AddressFamily != AddressFamily.InterNetworkV6)
            {
                StringBuilder gatewayIPAddresses = new StringBuilder();
                string gatewayIPAddressesDisplay = string.Empty;
                foreach (var address in adapter.GetIPProperties().GatewayAddresses)
                {
                    gatewayIPAddresses.Append(address.Address);
                    gatewayIPAddresses.Append(" ");
                }

                if (gatewayIPAddresses.Length > 0)
                {
                    gatewayIPAddressesDisplay = gatewayIPAddresses.ToString().TrimEnd(' ');
                }

                list.Add(new NetworkAdapter(getDevice(adapter.Id))
                {
                    Name = adapter.Name,
                    ID = adapter.Id,
                    Description = adapter.Description,
                    IPAddress = uniCast.Address.ToString(),
                    NetworkInterfaceType = adapter.NetworkInterfaceType.ToString(),
                    Speed = adapter.Speed.ToString("#,##0"),
                    MacAddress = getMacAddress(adapter.GetPhysicalAddress().ToString()),
                    gatewayIpAddress = gatewayIPAddressesDisplay
                });
            }
        }

    return list.GroupBy(n => n.ID).Select(g => g.FirstOrDefault()).ToArray();
}

在此方法结束时,我将所有相同的网卡组合后返回列表:

return list.GroupBy(n => n.ID).Select(g => g.FirstOrDefault()).ToArray();

所以现在它解决了我的问题,我只能看到每个适配器和我的所有适配器的属性通过标签显示在我的表单上。 我想做什么我不知道如何从同一个适配器(具有相同的ID)获取所有Ip地址并将它们显示在一起,例如:

我在同一个适配器上配置了3个Ip地址:192.168.0.100, 192.168.0.101, 192.168.0.102

所以我想在Ip地址属性中编辑我的对象我希望将其余的Ips添加到IP而不是 192.168.0.100 它变为 192.168.0.100, 101,102 (此属性为字符串)

1 个答案:

答案 0 :(得分:0)

return list.GroupBy(n => n.ID).Select(g => new NetworkAdapter()
        {
            Description = g.First().Description,
            ID = g.Key,
            IPAddress = string.Join(",", g.Select(v => v.IPAddress)),
            MacAddress = g.First().MacAddress,
            Name = g.First().Name,
            NetworkInterfaceType = g.First().NetworkInterfaceType,
            Speed = g.First().Speed
        }).ToList();

您需要192.168.0.100, 192.168.0.101, 192.168.0.102将其处理为92.168.0.100, 101, 102