【问题标题】:How can I add the foreach statement into my current definitions?如何将 foreach 语句添加到我当前的定义中?
【发布时间】:2016-05-25 17:34:01
【问题描述】:

我正在尝试创建一个轻量级应用程序来检查机器上的某些安全设置。目前,除了当前的加密状态外,我拥有一切。我被引导到 WMI 创建者,这似乎是最安全的选择(虽然有点慢)但是,我收到以下错误:

“foreach 语句无法对“ComplianceGuide.ManagementObjectCollection”类型的变量进行操作,因为“ComplianceGuide.ManagementObjectCollection”不包含“GetEnumerator”的公共定义

在哪里添加定义? C# 有时令人困惑。一个视频教程会很棒。

    public class MyWMIQuery
{

    public static void Main()
    {

        try
        {
            ManagementObjectSearcher searcher =
                new ManagementObjectSearcher("root\\CIMV2\\Security\\MicrosoftVolumeEncryption",
                "SELECT * FROM Win32_EncryptableVolume");

            foreach (System.Management.ManagementObject queryObj in searcher.Get())
            {
                Console.WriteLine("-----------------------------------");
                Console.WriteLine("Win32_EncryptableVolume instance");
                Console.WriteLine("-----------------------------------");
                Console.WriteLine("ProtectionStatus: {0}", queryObj["ProtectionStatus"]);
            }
        }
        catch (ManagementException e)
        {
            MessageBox.Show("An error occurred while querying for WMI data: " + e.Message);
        }
    }
}

【问题讨论】:

  • "我去哪里添加定义?"您将其添加到类中 - 直接或通过实现 IEnumerableIEnumerable<T>
  • “视频教程会很棒” - others think so too
  • @DStanley 好像 Joe 正在使用一个据称已经实现 IEnumerable 的标准类 (msdn.microsoft.com/en-us/library/…)。
  • @GiladNaaman ComplianceGuide 命名空间似乎另有说明。
  • 您是在尝试使用内置的ManagementObjectCollection 类还是在ComplianceGuide 命名空间中定义了自己的类?

标签: c# foreach bitlocker


【解决方案1】:

我在屏幕截图中看到了一个名为 ManagementObjectCollection.cs 的文件。

我会冒昧地猜测,由于某种原因,该类的命名空间定义与框架提供的类的确切命名空间定义相匹配,并且该文件中的任何内容都没有实现GetEnumerator。新项目中的代码和正确的引用没有显示该错误。

如果你打算使用框架提供的类,我猜你需要 add a reference 到 System.Management.dll。如果您打算在文件中使用该类,请至少更改命名空间。

【讨论】:

  • 我不久前更改了名称空间,老实说无法告诉您原因。但是,如果我尝试切换到 System.Management 命名空间,则会收到大量错误。
  • 如何为我当前的命名空间添加对 foreach 定义的 IEnumerator 的引用?我觉得如果这是我需要在这个项目中完成的最后一个功能,我会更好。
  • 不要更改 your 类的命名空间 - 引用 System.Management。看起来你从那个库中复制了源代码,这不是你应该做的。
  • 老实说,这是我第一次尝试自己完成一个项目,我距离学习 C# 还只有几周的时间。对不起:/
  • 无需抱歉。您为代码定义的命名空间不应与任何框架命名空间匹配。您最终会遇到编译器不知道您在谈论哪个类的冲突。我可能会退后一步,阅读一些 C# 基础知识。 msdn.microsoft.com/en-us/library/dfb3cx8s.aspx
猜你喜欢
  • 1970-01-01
  • 2013-08-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-04-06
  • 2014-02-13
  • 1970-01-01
  • 2021-05-15
相关资源
最近更新 更多