Как я могу сделать это НЕ цикл? - PullRequest
0 голосов
/ 04 июня 2010

как я могу сделать это НЕ цикл?

             {
             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());
             }

Ответы [ 5 ]

2 голосов
/ 04 июня 2010

Вот очень глупый код, чтобы избежать 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;
}
1 голос
/ 04 июня 2010

Вот, пожалуйста.

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();
0 голосов
/ 04 июня 2010

Если все, что вы хотите сделать, это не открывать страницы дважды, тогда используйте «Different»:

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);
0 голосов
/ 04 июня 2010

Обычный однострочный:

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

Конечно, ForEach имеет свой собственный цикл внутри.

0 голосов
/ 04 июня 2010

Есть несколько (довольно бессмысленных) способов использования списков и методов, таких как ForEach - или, возможно, Select, но здесь вы не решаете проблему. Просто используйте цикл. Он прекрасно отражает то, что вы делаете.

Один хакерский способ (я не рекомендую это здесь):

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

не улучшение ИМО.

...