Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# windows 10更新后更改了MAC地址顺序_C#_.net_Wmi_Mac Address - Fatal编程技术网

C# windows 10更新后更改了MAC地址顺序

C# windows 10更新后更改了MAC地址顺序,c#,.net,wmi,mac-address,C#,.net,Wmi,Mac Address,我有一个读取mac地址的程序(使用MACAddress属性) 我读的所有mac地址都很好,但由于某种原因,在升级到build 1803之后,我的mac地址发生了变化 Midle列上是1709版的mac,最右边的列上是更新到1803后的mac 我能保证我总是按照同样的顺序阅读它们吗?或者我可以按照特定的顺序阅读它们吗 这是我的密码 public static List<string> WMISearcher(string WMIClassName, string searchPar

我有一个读取mac地址的程序(使用MACAddress属性)

我读的所有mac地址都很好,但由于某种原因,在升级到build 1803之后,我的mac地址发生了变化

Midle列上是1709版的mac,最右边的列上是更新到1803后的mac

我能保证我总是按照同样的顺序阅读它们吗?或者我可以按照特定的顺序阅读它们吗

这是我的密码

public static List<string> WMISearcher(string WMIClassName, string 
searchParams, bool win32_Prefix = true, string rootNamespace = "")
{
    List<string> result = new List<string>();

   var searcherData = getSearcherData(WMIClassName, searchParams, win32_Prefix, rootNamespace);
   foreach (ManagementObject obj in searcherData)
   {
       foreach (PropertyData data in obj.Properties)
           if (data.Value != null)
               result.Add(data.Value.ToString());

   }

   return result;


 }


 private static ManagementObjectCollection getSearcherData(string WMIClassName, string searchParams, bool win32_Prefix = true, string rootNamespace = "")
       {
           string prefix = "Win32_";
           string rootPrefix = @"root\";
           if (!win32_Prefix)
               prefix = String.Empty;

           if (!String.IsNullOrEmpty(rootNamespace))
               rootNamespace = rootPrefix + rootNamespace;
           else
               rootNamespace = rootPrefix + "cimv2";

           string searchQuery = String.Format("SELECT {0} FROM {1}", searchParams, prefix + WMIClassName);
           using (ManagementObjectSearcher searcher =
                   new ManagementObjectSearcher(rootNamespace, searchQuery))
           {
               //  Console.WriteLine("{0}", WMIName);
               return searcher.Get();
           }
       }
您可以根据需要轻松使用和排序列表:

惰性选项:

var adapters = helper.Query("SELECT * FROM Win32_NetworkAdapterConfiguration").ToList();
强类型选项:

1) 声明您的模型(这是一个示例,您可以添加或删除所需的任何属性):

2) 查询和订购人:

List<NetworkAdapterConfiguration> interfaces = helper.Query<NetworkAdapterConfiguration>().OrderBy(n=>n.Description).ToList();
List interfaces=helper.Query().OrderBy(n=>n.Description.ToList();

这样,您就有了一个列表,您可以根据需要进行排序(在本例中为
Description
)。请访问项目存储库以获取更多参考。

是否可以对列表进行排序?您有不同的适配器集。我假设其中一些是虚拟的。可能是重新创建的?@Steve是的,我有适配器(其中3个),我不知道(或者更确切地说,不知道如何检查)是否有这些适配器recreated@JLe我将检查MAC是否是来自PING(ARP请求)的响应,并且响应的时间并不总是相同的。要始终获得相同的顺序,您需要进行排序。它与“手动”调用WMI并对其进行排序有何不同?@styx首先,您编写的代码要少得多。他们让你和他们一起工作。更好、更干净、更简单的IMHO。
[WMIClass("Win32_NetworkAdapterConfiguration")]
public class NetworkAdapterConfiguration
{
    public string Caption { get; set; }

    public string Description { get; set; }

    public uint IPConnectionMetric { get; set; }

    public UInt32 InterfaceIndex { get; set; }

    public string WINSScopeID { get; set; }
}
List<NetworkAdapterConfiguration> interfaces = helper.Query<NetworkAdapterConfiguration>().OrderBy(n=>n.Description).ToList();