带有项目的列表返回空

时间:2011-01-14 13:30:32

标签: c# .net 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);
            }
        }

4 个答案:

答案 0 :(得分:56)

这是一个问题:

catch { }

如果出现任何问题,您只能默默地中止。

也许那是怎么回事? (编辑:是的。见后面。)

接下来的问题是你的&#34;列表&#34;只会包含一个字符串......这真的是你想要的吗?我怀疑你看到的列表实际上是空的 - 但它将包含一个空字符串。

(作为旁注,我会强烈建议您开始遵循.NET命名约定并避免像这样的全局变量。)

编辑:Aargh - 我刚刚意识到你做了什么。你可能实际上在NullReferenceException中获得了list_all_pocesses,你已经抓住并忽略了它。

在您为pro_hook.Add分配值之前,您已拨打pro_hook。基本上你有一个变量初始值设定项,它使用一个方法来反过来使用变量。 不要这样做。如果您在调试器中单步执行代码,您可能会更多地了解正在进行的操作,但基本上您已创建了意大利面的大球。

为什么list_all_pocesses只返回List<string>?你为什么要使用StringBuilder

答案 1 :(得分:5)

嗯......你正在返回一个空的字符串生成器。那是你的问题。您的代码正在执行您要告诉它的操作。 :)

 return _list.ToString();

答案 2 :(得分:3)

public class process_hook
{
    public static List<string> pro_hook = list_all_pocesses();
    protected static List<string> list_all_pocesses()
    {
        List<string> list = new List<string>();

        foreach (Process i in Process.GetProcesses("."))
        {
            foreach (ProcessModule pm in i.Modules)
            {
                list.Add(pm.FileName.ToString());
            }
        }
        return list;
    }
}

答案 3 :(得分:-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;
}