每次说出
我都会收到两个错误 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
}
答案 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} }
但我建议尽快学习静态和实例变量之间的区别。