Pow*_*fet 6 .net c# list process
我已经创建了一个简单的List函数,但是如果我循环遍历List它就是空的.不应该!
// List function
public class process_hook
{
public static List<String> pro_hook = new List<String>
(new String[] { list_all_pocesses() });
protected static string list_all_pocesses()
{
StringBuilder _list = new StringBuilder();
foreach (Process i in Process.GetProcesses("."))
{
try
{
foreach (ProcessModule pm in i.Modules)
{
pro_hook.Add(pm.FileName.ToString());
}
}
catch { }
}
return _list.ToString();
}
}
// call
private void button1_Click(object sender, EventArgs e)
{
foreach (String _list in process_hook.pro_hook)
{
Console.WriteLine(_list);
}
}
Run Code Online (Sandbox Code Playgroud)
Jon*_*eet 56
那么这是一个问题:
catch { }
Run Code Online (Sandbox Code Playgroud)
如果出现任何问题,你只会默默地中止.
也许这就是发生了什么?(编辑:是的.见稍后.)
接下来的问题是你的"列表"只会包含一个字符串...这真的是你想要的吗?我怀疑你看到的列表实际上是空的 - 但它将包含一个空字符串.
(作为旁注,我强烈建议您开始遵循.NET命名约定并避免像这样的全局变量.)
编辑:Aargh - 我刚刚意识到你做了什么.你可能实际上得到一个NullReferenceException中list_all_pocesses,您已捕获并忽略.
您的来电pro_hook.Add是在您分配值之前进行的pro_hook.基本上你有一个变量初始化器,它使用一个方法反过来使用变量.不要那样做.如果你在调试器中单步调试代码,你可能会更多地了解正在发生的事情,但基本上你已经为自己创建了一个大意大利面.
为什么不list_all_pocesses回归List<string>?你为什么要使用一个StringBuilder?
嗯......你正在返回一个空的字符串生成器.那是你的问题.您的代码正在执行您要告诉它的操作.:)
return _list.ToString();
Run Code Online (Sandbox Code Playgroud)
cdh*_*wie -3
_list.ToString()不会返回任何有意义的值。尝试这样的事情:
public static List<string> pro_hook = list_all_processes();
protected static List<string> list_all_processes()
{
var list = new List<string>();
foreach (Process i in Process.GetProcesses(".")) {
try {
foreach (ProcessModule pm in i.Modules) {
list.Add(pm.FileName);
}
} catch { }
}
return list;
}
Run Code Online (Sandbox Code Playgroud)