我无法解决的两个错误

时间:2017-02-26 05:57:23

标签: c# process int

每次说出

我都会收到两个错误

1)字段初始值设定项不能引用非静态字段,方法或属性Program.csProcess

2)foreach语句无法对decimal类型的变量进行操作,因为decimal不包含GetEnumerator的公开定义

 {
    Process[] csProcess = Process.GetProcessesByName("notepad");
    static var modules = csProcess.Modules;
    static void Main(string[] args)
    {
        foreach (ProcessModule module in modules)
        {
            if (module.ModuleName == "client.dll")
            {
                // do stuff
            }

1 个答案:

答案 0 :(得分:2)

1)进程[] csProcess 静态。坦率地说,模块不应该是。

2)你不能在方法之外使用var。改为使用ProcessModuleCollection。

静态变量,方法等作用于应用程序,而成员(非静态变量,方法等)属于您创建的类/结构的实例。

这提供了有关何时实例化静态变量的更多信息: When do static variables get initialized in C#?

如果您想将这些变量保持为应用程序的全局变量,您可以像这样重构代码:

public class Program
{
    static Process csProcess;
    static ProcessModuleCollection modules;

    static void Main(string[] args)
    {
        csProcess = Process.GetProcessesByName("notepad").FirstOrDefault();
        if (csProcess == null) { return; } // notepad isn't running
        modules = csProcess.Modules;
        foreach (ProcessModule module in modules)
        {
            if (module.ModuleName == "client.dll")
            {
                // do stuff
            }
        }  
    }
}

当前的答案采用它找到的第一个记事本进程,并循环遍历其模块。如果您要检查找到的每个记事本流程,则需要删除.First(),将Process更改为Process[],然后循环:{{1} }

但我建议尽快学习静态和实例变量之间的区别。