private List<Adapter> GetAllIPV4Interfaces()
{
var adapters = new List<Adapter>();
NetworkInterface[] interfaces = NetworkInterface.GetAllNetworkInterfaces();
foreach(var nic in interfaces)
{
var ipAddress = nic.GetIPProperties()
.UnicastAddresses.FirstOrDefault(ip => ip.Address.AddressFamily == AddressFamily.InterNetwork &&
!IPAddress.IsLoopback(ip.Address));
if (ipAddress != null)
{
adapters.Add(new Adapter{IPAdress = ipAddress.Address.ToString(), Name = nic.Name});
}
}
return adapters;
}
上面的代码遍历了所有可用的Nics,并获得了一个IPV4地址不是环回(127.0.0.1)和 正如你所看到的,我实际上在我的Loop中添加了一个Adapter类的新实例到我的Adapters列表中。 但是,如果我没有创建我的对象的新实例,它会使用新的适配器覆盖整个列表,如果我没有创建我的对象的新实例
有人可以对此有所了解吗? 我正处于拔毛的地步 这可能是一个忽略一件简单事情的例子,我已经盯着自己看不清楚了。
适配器类只有2个字符串属性。
PS 如果我使用一个字符串列表并将ip和name连接成一个字符串..这段代码工作正常。
以防万一 我的适配器类
class Adapter
{
/// <summary>
/// Gets or sets the name.
/// </summary>
public string Name
{
get { return _name; }
set { _name = value; }
}
/// <summary>
/// Gets or sets the ip address.
/// </summary>
public string IPAdress
{
get { return _ipAdress; }
set { _ipAdress = value; }
}
/// <summary>
/// Gets or sets the _name.
/// </summary>
private static string _name { get; set; }
/// <summary>
/// Gets or sets the _ip adress.
/// </summary>
private static string _ipAdress { get; set; }
}
答案 0 :(得分:9)
您的问题是Adapter
类的字段被声明为static
。从两个属性中取出static
关键字,它不会显示此行为:
private string _name;
private string _ipAdress;
将它们设为static
意味着Adapter
类的所有实例共享相同的存储值。