C# 我如何使这不是一个循环?

C# 我如何使这不是一个循环?,c#,.net-2.0,C#,.net 2.0,我怎样才能使这不是一个循环 { ManagementObjectSearcher Vquery = new ManagementObjectSearcher("SELECT * FROM Win32_VideoController"); ManagementObjectCollection Vcoll = Vquery.Get(); foreach (ManagementObject mo i

我怎样才能使这不是一个循环

             {
             ManagementObjectSearcher Vquery = new ManagementObjectSearcher("SELECT * FROM Win32_VideoController");
             ManagementObjectCollection Vcoll = Vquery.Get();
             foreach (ManagementObject mo in Vcoll)
             {
                 System.Diagnostics.Process.Start("http://www.google.com/search?hl=en&q=" + mo["name"].ToString());
             }

有一些相当无意义的方法涉及到列表和方法,比如ForEach,或者Select,但这里并没有解决问题。只要使用循环。它完美地表达了你在做什么

我在这里不推荐这样一种方式:

Vcoll.Cast<ManagementObject>().Select(mo =>
    System.Diagnostics.Process.Start("http://www.google.com/search?hl=en&q="
        + mo["name"].ToString())).ToArray();
在我看来,这不是一个进步。

给你

var procs = (from mo in (new ManagementObjectSearcher("SELECT * FROM Win32_VideoController")).Get().OfType<ManagementObject>()
                    select (System.Diagnostics.Process.Start("http://www.google.com/search?hl=en&q=" + mo["name"].ToString()))).ToList();
一个常见的单衬里是:

Vcoll.ForEach( mo -> System.Diagnostics.Process.Start("http://www.google.com/search?hl=en&q=" + mo["name"].ToString()));

当然,ForEach内部有自己的循环。

这里有一个非常愚蠢的代码来避免ForEach:

if( Vcoll.Count > 0)
{
   IEnumerator en = collection.GetEnumerator();
   en.MoveNext();
   System.Diagnostics.Process.Start("http://www.google.com/search?hl=en&q=" + en.Current["name"].ToString());
}
但是,如果问题是打开多个页面,我更喜欢在foreach中进行简单的中断:

foreach (ManagementObject mo in Vcoll)
{
   System.Diagnostics.Process.Start("http://www.google.com/search?hl=en&q=" + mo["name"].ToString());
   break;
}

如果您不想两次打开页面,请使用distinct:

var foundNames = 
  (from ManagementObject mo in new ManagementObjectSearcher("SELECT * FROM Win32_VideoController").Get()
   let name = mo["Name"].ToString()
   where !String.IsNullOrEmpty(name)
   select name).Distinct();

foreach(var name in foundNames)
  Process.Start("http://www.google.com/search?hl=en&q=" + name);

循环有什么问题?因为它会打开页面两次。@NightsEvil-你想让它做什么?假设有多个控制器。如果问题是多个页面,为什么不问问我如何停止打开多个页面?你不能在这里添加一个中断而不是C程序员?我不明白这个问题。当然,如果你做了两次某件事,又不想做两次,那就停止做吧?从集合中抓取第一个项目并处理它,您就完成了。我在这里没有得到什么?没有;LINQ中的执行被延迟。实际上,除了设置链条外,这没有任何作用。我需要的完全是休息;非常感谢你!我觉得自己很迟钝。。。哈哈,谢谢你,有时候,你需要的只是休息一下——听起来像是古老的智慧,它不是一个完整/正确的IEnumerator用法;您还应该检查IDisposable并调用Dispose。或者更好;马克:你说得对,我的行为是一种挑衅,而不是采用foreach的真正解决方案是很清楚的;