public static ICommonEthernetPortSettingData CreateFromObject(ManagementObject mo)
        {
            string a = (string)mo["__Class"];

            if (string.Equals(a, "Msvm_SyntheticEthernetPortSettingData", StringComparison.InvariantCultureIgnoreCase))
            {
                return(SyntheticEthernetPortSettingData.CreateFromManagementObject(mo));
            }
            if (string.Equals(a, "Msvm_EmulatedEthernetPortSettingData", StringComparison.InvariantCultureIgnoreCase))
            {
                return(EmulatedEthernetPortSettingData.CreateFromManagementObject(mo));
            }
            throw new HyperVException("I don't know how to handle an Ethernet port setting data of type " + a);
        }
        public static IEnumerable <ICommonEthernetPortSettingData> GetRelated(IVirtualSystemSettingData vssd)
        {
            ManagementObjectCollection adapters = vssd.Object.GetRelated("CIM_EthernetPortAllocationSettingData");

            try
            {
                foreach (ManagementObject managementObject in adapters)
                {
                    ManagementObject adapter = managementObject;
                    if ((int)(ushort)adapter["ResourceType"] != 10)
                    {
                        adapter.Dispose();
                    }
                    else
                    {
                        string adapterClass = (string)adapter["__Class"];
                        if (string.Equals(adapterClass, "Msvm_SyntheticEthernetPortSettingData", StringComparison.InvariantCultureIgnoreCase))
                        {
                            yield return(SyntheticEthernetPortSettingData.CreateFromManagementObject(adapter));
                        }
                        else
                        {
                            if (!string.Equals(adapterClass, "Msvm_EmulatedEthernetPortSettingData", StringComparison.InvariantCultureIgnoreCase))
                            {
                                throw new HyperVException("I don't know how to handle an Ethernet port setting data of type " + adapterClass);
                            }
                            yield return(EmulatedEthernetPortSettingData.CreateFromManagementObject(adapter));
                        }
                        adapterClass = (string)null;
                    }
                    adapter = (ManagementObject)null;
                }
            }
            finally
            {
                if (adapters != null)
                {
                    adapters.Dispose();
                }
            }
            adapters = (ManagementObjectCollection)null;
        }