Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/312.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 林克需要帮助吗_C#_.net_Linq - Fatal编程技术网

C# 林克需要帮助吗

C# 林克需要帮助吗,c#,.net,linq,C#,.net,Linq,我写一个Linq查询只是为了学习 var result = Process.GetProcesses() .Where(p => p.WorkingSet64 > 20 * 1024 * 1024) .OrderByDescending(p => p.WorkingSet64) .Select(p => new {p.Id,p.ProcessName,p.Working

我写一个Linq查询只是为了学习

    var result = Process.GetProcesses()
                .Where(p => p.WorkingSet64 > 20 * 1024 * 1024)
                .OrderByDescending(p => p.WorkingSet64)
                .Select(p => new {p.Id,p.ProcessName,p.WorkingSet64 });
我想迭代到结果

 foreach(process in result) //error-type or namespace process could not be found.
            {
                Console.WriteLine(Process.ProcessName);
            }
我想迭代到结果,并在控制台上打印每个进程名称

我做错了什么。

你很接近:

foreach (var process in result) {
    Console.WriteLine(process.ProcessName);
}
(我假设您以前没有声明名称
进程
。)


还请注意,如果在foreach行中使用process(带一个小p),则在循环中使用它时需要保持相同的大小写。

是否在循环之前声明
process
?如果不是,您应该将每个的
更改为

foreach(var process in result)
{
    Console.WriteLine(process.ProcessName);
}

您还可以将查询投影到流程列表中:

List<Process> result = Process.GetProcesses()
              .Where(p => p.WorkingSet64 > 20 * 1024 * 1024)
              .OrderByDescending(p => p.WorkingSet64).ToList();

foreach(Process process in result) 
{
  Console.WriteLine(process.ProcessName);
}
List result=Process.getprocesss()
.其中(p=>p.WorkingSet64>20*1024*1024)
.OrderByDescending(p=>p.WorkingSet64).ToList();
foreach(结果中的过程)
{
Console.WriteLine(process.ProcessName);
}

考虑将LINQ的查询语法用于简洁代码:

var result = from p in Process.GetProcesses()
             where p.WorkingSet64 > 20 * 1024 * 1024
             orderby p.WorkingSet64 descending
             select new { p.Id, p.ProcessName, p.WorkingSet64 };
然后,不要循环,而是在LINQ中思考做同样的事情:

Console.WriteLine(string.Join("\r\n", result.Select(p => p.ProcessName)));
编辑:上面使用的string.Join()重载仅在.NET 4.0中引入。要使用早期版本中可用的重载,该重载接受
字符串[]
而不是
IEnumerable
,只需在
.Select()
之后链接
.ToArray()


在这种情况下,他别无选择,只能使用var,因为他使用的是匿名类型。不可能从LINQ查询中声明
进程
,这是一个匿名类型。需要将WriteLine中的第一个“P”更改为“P”:@Rune FS在您发表评论之前已更改:)它是在“选择”部分中创建的匿名类型的对象在result@Rune,他建议不要创建匿名类型,他应该直接使用
过程
对象,因为它们已经实例化,并且包含OP需要的所有数据。这没什么错。@Allon首先,没有任何地方说明Process.GetProcess的返回类型是IEnumerable类型,只有IEnumerable(尽管我同意这似乎是合理的)第二,OP想学习,所以帮助他理解他发布的代码,而不是给他一些代码,这些代码在我的世界里可能也可以作为一个答案,但我同意你的意见,也许否决投票有点苛刻,所以如果允许的话,我会重做to@Rune你所说的“无处声明”是什么意思?返回类型为
System.Diagnostics.Process[]
,如上所述。@Rune:我同意否决投票,理由是我没有真正帮助OP了解他做错了什么。糟糕的是,我更多地看他的代码片段,而不是更认真地阅读问题。然而,我不会同意你的第一个评论,因为我的回答不是创建匿名类型,而是创建一个“进程”列表。
Console.WriteLine(string.Join("\r\n", result.Select(p => p.ProcessName).ToArray()));