Страницы

Поиск по вопросам

вторник, 28 мая 2019 г.

SystemInfo как улучшить код?

Проблема в том что выходит слишком много foreach, как всё это можно сократить?
private static string pcCPU; private static string pcGPU; private static string pcLocalIP; private static string pcExternalIP; private static string pcAntivirus;
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"]); } } }
P.S: Я вот попробовал так сделать, но тут не получается:
1 - Выводит ошибку Invalid Class
2 - в twf нельзя записать WriteALLtext, можно только Write
StringBuilder sb = new StringBuilder(); foreach (ManagementBaseObject avResult in avsearcher.Get()) { Sb.Append(" антивирус: ").Append(pcAntivirus).Append("
"); } foreach (ManagementObject gr in gs.Get()) { foreach (PropertyData pty in gr.Properties) { if (pty.Name == "Description") { Sb.Append(" Видеоадаптер: ").Append(pcGPU).Append(pty.Value.ToString()).Append("
");; } } } foreach (ManagementObject gob in sar.Get()) { Sb.Append(" Модель компьютера: ").Append(gob["Manufacturer"]).Append(gob["Model"]).Append("
");; } twf.Write(sb.ToString());
А вот ошибка: На просторах интернета нашёл интересный код: с использованием List
Информация о системе


Ответ

Например, вы можете отделить получение данных от их вывода.
// зачем вам странный трюк с "& "? var avNames = avsearcher.Get() .Cast() .Select(av => (string)av["displayName"]) .ToList();
var graphicCardList = gs.Get() .Cast() .Select(mo => (string)mo["Description"]) .ToList();
var computerInfoList = sar.Get() .Cast() .Select(gob => (string)gob["Manufacturer"] + gob["Model"]) .ToList();
И теперь запись:
File.AppendAllLines( savePath, avNames.Select(s => $" Антивирус: {s}"), Encoding.UTF8);
File.AppendAllLines( savePath, graphicCardList.Select(s => $" Видеоадаптер: {s}"), Encoding.UTF8);
File.AppendAllLines( savePath, computerInfoList.Select(s => $" Модель компьютера: {s}"), Encoding.UTF8);
Циклы не нужны вовсе.

Комментариев нет:

Отправить комментарий