2012-12-08 1 views
1

이것은 내 컴퓨터 네트워크 인터페이스 컬렉션을 반환하려는 클래스입니다. 나는 IEnumerable을 반환하도록 선택하고 그것을 수행하는 방법을 모른다 (나는 새로운 개발자 임). 또는 maybee 거기에 내 수업을 구축하는 타자 방법은 무엇입니까?모든 컴퓨터 네트워크 인터페이스 컬렉션을 반환하십시오.

public class NetworkAdapter 
{ 
    private string _name; 
    private string _id;   
    private string _description; 
    private string _ipAddress; 
    private string _gatewayIpAddress; 
    private string _speed; 
    private string _networkInterfaceType; 
    private string _macAddress; 

    public IEnumerable<NetworkAdapter> getAdapterInfo() 
    { 
     foreach (NetworkInterface adapter in NetworkInterface.GetAllNetworkInterfaces()) 
     { 
      IPInterfaceProperties properties = adapter.GetIPProperties(); //fetch network configuration properties 
      foreach (IPAddressInformation uniCast in properties.UnicastAddresses) 
      { 
       if (!IPAddress.IsLoopback(uniCast.Address) && uniCast.Address.AddressFamily != AddressFamily.InterNetworkV6) //ignore loop-back addresses & IPv6 internet protocol family 
       { 
        _name = adapter.Name; 
        _id = adapter.Id; 
        _description = adapter.Description; 
        _ipAddress = uniCast.Address.ToString(); 
        _networkInterfaceType = adapter.NetworkInterfaceType.ToString(); 
        _speed = adapter.Speed.ToString("#,##0"); 

        _macAddress = adapter.GetPhysicalAddress().ToString(); 

        foreach (GatewayIPAddressInformation gatewayAddress in adapter.GetIPProperties().GatewayAddresses) 
        { 
         _gatewayIpAddress = gatewayAddress.Address.ToString(); 
        } 
       } 
      } 
     } 

     yield return new NetworkAdapter att; 
    } 
} 

답변

1

당신은 LINQ를 사용할 수 있습니다

return from adapter in NetworkInterface.GetAllNetworkInterfaces() 
     from uniCast in adapter.GetIPProperties().UnicastAddresses 
     where !IPAddress.IsLoopback(uniCast.Address) && uniCast.Address.AddressFamily != AddressFamily.InterNetworkV6 
     let lastGatewayAddress = adapter.GetIPProperties().GatewayAddresses.LastOrDefault() 
     select new NetworkAdapter 
     { 
      _name = adapter.Name, 
      _id = adapter.Id, 
      _description = adapter.Description, 
      _ipAddress = uniCast.Address.ToString(), 
      _networkInterfaceType = adapter.NetworkInterfaceType.ToString(), 
      _speed = adapter.Speed.ToString("#,##0"), 
      _macAddress = adapter.GetPhysicalAddress().ToString(), 
      _gatewayIpAddress = lastGatewayAddress == null ? null : lastGatewayAddress.Address.ToString() 
     }; 

당신이 게이트웨이 주소로 뭘 하려는지 명확하지 않다. 현재로서는 마지막 문자열을 원하는 것처럼 보이지만 대신 단일 문자열로 결합 할 수 있습니다. 이 경우 다음을 사용할 수 있습니다.

_gatewayIpAddress = string.Join(" ", adapater.GetIPProperties().GatewayAddresses.Select(a => a.Address)); 
+0

어디에 넣어 줄 필요가 _gatewayIpAddress = string.Join ("", adapater.GetIPProperties(). GatewayAddresses);? – user1710944

+0

@ user1710944 - 당신은'_gatewayIpAddress = lastGatewayAddress == null 대신에 사용하겠습니까? null : lastGatewayAddress.ToString()'. 이것은'gatewayIpAddresses' 문자열이 무엇을 원하는지에 달려 있습니다. – Lee

+0

f에서 기본 게이트웨이가 비어 있습니다. 첫 번째 어댑터 및 두 번째 그냥 System.Net.NetworkInformation.SystemGatewayIPAddressInformation – user1710944

0

당신은 NetworkAdapter의 객체를 생성하고 objectyield에서 수익을 사용해야합니다. 개인 회원을 대중에게 공개하여 소비자 수업에 액세스 할 수있게했습니다.

public class NetworkAdapter 
{ 
    public string Name {get; set;} 
    public string Id {get; set;}   
    public string Description {get; set;} 
    public string IpAddress {get; set;} 
    public string GatewayIpAddress {get; set;} 
    public string Speed {get; set;} 
    public string NetworkInterfaceType {get; set;} 
    public string MacAddress {get; set;} 

    public IEnumerable<NetworkAdapter> getAdapterInfo() 
    { 
     NetworkAdapter na = null; 
     foreach (NetworkInterface adapter in NetworkInterface.GetAllNetworkInterfaces()) 
     { 
      IPInterfaceProperties properties = adapter.GetIPProperties(); //fetch network configuration properties 
      foreach (IPAddressInformation uniCast in properties.UnicastAddresses) 
      { 
       if (!IPAddress.IsLoopback(uniCast.Address) && uniCast.Address.AddressFamily != AddressFamily.InterNetworkV6) //ignore loop-back addresses & IPv6 internet protocol family 
       { 
        na = new NetworkAdapter{ 
        Name = adapter.Name; 
        Id= adapter.Id; 
        Description= adapter.Description; 
        IpAddress= uniCast.Address.ToString(); 
        GatewayIpAddress= adapter.NetworkInterfaceType.ToString(); 
        Speed= adapter.Speed.ToString("#,##0"); 

        NetworkInterfaceType = adapter.GetPhysicalAddress().ToString(); 
        }; 

        foreach (GatewayIPAddressInformation gatewayAddress in adapter.GetIPProperties().GatewayAddresses) 
        { 
         na.GatewayIpAddress = gatewayAddress.Address.ToString(); 
        } 
       } 
      } 
      yield return na ; 
     } 
    } 
} 
+0

여기에 모든 인터페이스 속성이 없습니다. – user1710944

+0

내 대답이 업데이트되었습니다. – Adil

+0

왜 첫 번째 어댑터 만 반환하고 두 번째 어댑터는 건너 뛸까요? – user1710944

관련 문제