我已经创建了一个简单的列表函数,但是如果我遍历列表,它就是空的。不应该是这样的!
// 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);
}
}发布于 2011-01-14 21:37:06
_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;
}发布于 2011-01-14 21:33:37
好吧,这是一个开始的问题:
catch { }如果出现任何错误,您只需静默中止。
也许这就是正在发生的事情?(编辑:它是。请参阅后面的内容。)
下一个问题是你的“列表”将永远只包含一个字符串...这真的是你想要的吗?我怀疑你看到的列表实际上是空的--但它只包含一个空字符串。
(顺便说一句,我强烈建议您开始遵循.NET命名约定,并避免像这样的全局变量。)
编辑:啊--我刚刚意识到你做了什么。您可能实际上在list_all_pocesses中得到了一个NullReferenceException,您已经捕获并忽略了它。
在给pro_hook赋值之前,就会调用pro_hook.Add。基本上,你有一个变量初始化器,它使用一个方法,而这个方法又使用这个变量。不要这样做。如果你在调试器中单步执行你的代码,你可能会对正在发生的事情有更多的了解,但基本上你已经为自己创造了一个很大的意大利面球。
为什么list_all_pocesses不直接返回一个List<string>?你为什么要用StringBuilder呢?
发布于 2011-01-14 21:35:08
好吧..。您将返回一个空的字符串生成器。那是你的问题。你的代码正在做你告诉它做的事情。:)
return _list.ToString();https://stackoverflow.com/questions/4691530
复制相似问题