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的真正解决方案是很清楚的;