@ArteSDeveloper

.NET 2.x Системная информация — как улучшить код?

string savePath = @"C:\Sys.txt";
                   using (FileStream file = new FileStream(savePath, FileMode.Append))
                           {
                   using (StreamWriter twf = new StreamWriter(file, Encoding.UTF8))
                           {
                   foreach (ManagementBaseObject avResult in avsearcher.Get())
                           {
                               pcAntivirus = "& " + (avResult.GetPropertyValue("displayName")).ToString();
                               pcAntivirus = (pcAntivirus.StartsWith("& ")) ? pcAntivirus.Substring(1) : pcAntivirus;
                               twf.WriteLine(" антивирус: " + pcAntivirus);
                           }
                           foreach (ManagementObject gr in gs.Get())
                           {
                               foreach (PropertyData pty in gr.Properties)
                               {
                                   if (pty.Name == "Description")
                                   {
                                       pcGPU += pty.Value.ToString();
                                       twf.WriteLine("  Видеоадаптер: " + pcGPU);
                                   }
                               }
                           }
foreach (ManagementObject gob in sar.Get())
                           {
                               twf.WriteLine("  Модель компьютера: " + gob["Manufacturer"] + gob["Model"]);
                           }


Проблема в том что слишком много foreach ! как можно сократить это всё?
  • Вопрос задан
  • 135 просмотров
Пригласить эксперта
Ответы на вопрос 1
alex1t
@alex1t
.net developer
Как вариант использовать LINQ и его метод SelectMany (возможно несколько раз). (см. professorweb.ru/my/LINQ/base/level2/2_2.php)
И методы Concat.
Т.е. будет примерно так
IEnumerable<string> strings = avsearcher.Get().Select(avResult => avResult.ToDisplayName()) // это метод расширение, который делает нужную вам строку
    .Concat(
        gs.Get().SelectMany(gr => gr.Properties).Where(prt => prt.Name == "Description").Select(pry => prt.Value.ToString()) // здесь тоже можно использовать метод расширение
    ).Concat(
       sar.Get().Select(gob => gob.ToDisplayName()) // тоже метод расширение
    ); // и т.д.
// ну а дальше можно уже даже через foreach или любым другим способом записать в twf
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы