Avean Skrevet 18. juni 2014 Del Skrevet 18. juni 2014 Sliter med å lage en condition som sier at hvis alle strings møter kriteriet mitt, så gjør ett eller annet. if ((status == "OK")) { // Do something } Det jeg har kommet opp med blir feil, nå gjør den ett eller annet hvis en av stringene er OK. Jeg vil at den skal gjøre noe hvis ALLE stringene er OK. Dette er basicly en hardwaresjekk og jeg sjekker om statusen på alle enhetene er ok. Her er hele koden hvis noen er interessert: // Hardware check ManagementObjectSearcher deviceList = new ManagementObjectSearcher("Select Name, Status from Win32_PnPEntity"); if (deviceList != null) foreach (ManagementObject device in deviceList.Get()) { string status = device.GetPropertyValue("Status").ToString(); bool working = ((status == "OK") || (status == "Degraded") || (status == "Pred Fail")); if ((status == "OK")) { // Do something } else { // Do something else } } Lenke til kommentar
tusseladdden Skrevet 18. juni 2014 Del Skrevet 18. juni 2014 Viss kodeblokken kun skal gjøres om alle strengene er ok, kan den ikke være inne i foreach-løkken.Du kan f.eks lage en bool allIsOk som blir false viss noen av statusene er ulik ok og ha en if blokk etter løkken. Poenget er uansett at du sjekker om en eller flere er false, for det er det motsatte av at alle er ok. Lenke til kommentar
Avean Skrevet 18. juni 2014 Forfatter Del Skrevet 18. juni 2014 Viss kodeblokken kun skal gjøres om alle strengene er ok, kan den ikke være inne i foreach-løkken. Du kan f.eks lage en bool allIsOk som blir false viss noen av statusene er ulik ok og ha en if blokk etter løkken. Poenget er uansett at du sjekker om en eller flere er false, for det er det motsatte av at alle er ok. Kunne du gitt meg et lite eksempel? Sliter med å skjønne konkret hvordan jeg skriver det slikt. Lenke til kommentar
tusseladdden Skrevet 18. juni 2014 Del Skrevet 18. juni 2014 if (deviceList != null){bool allIsOK = true; foreach (ManagementObject device in deviceList.Get()){ string status = device.GetPropertyValue("Status").ToString(); bool working = ((status == "OK") || (status == "Degraded") || (status == "Pred Fail")); if(status!="OK"){ allIsOk = false; }} // Utenfor foreach løkken if ((allIsOk)) { // Do something } else { // Do something else }Vet ikke hvordan du hadde tenkt å bruke "working" , men du kan også bruke den istedet for allIsOk ( dårlig navn ) om du forandrer litt på den Lenke til kommentar
Avean Skrevet 18. juni 2014 Forfatter Del Skrevet 18. juni 2014 if (deviceList != null){ bool allIsOK = true; foreach (ManagementObject device in deviceList.Get()) { string status = device.GetPropertyValue("Status").ToString(); bool working = ((status == "OK") || (status == "Degraded") || (status == "Pred Fail")); if(status!="OK"){ allIsOk = false; } } // Utenfor foreach løkken if ((allIsOk)) { // Do something } else { // Do something else } Vet ikke hvordan du hadde tenkt å bruke "working" , men du kan også bruke den istedet for allIsOk ( dårlig navn ) om du forandrer litt på den Funker ikke helt, får at allisok er out of context siden den er utenom foreach. Men finnes det ikke noe som if (status.All == "OK") ? Lenke til kommentar
GeirGrusom Skrevet 18. juni 2014 Del Skrevet 18. juni 2014 (endret) var deviceList = new ManagementObjectSearcher("Select Name, Status from Win32_PnPEntity"); var allIsOk = deviceList.Get().Cast<ManagementObject>().All(device => (string)device.GetPropertyValue("Status") == "OK"); if(allIsOk) { // Do something }Her er en som fjerner alle elementer uten status også: var deviceList = new ManagementObjectSearcher("Select Name, Status from Win32_PnPEntity"); var statuses = from device in deviceList.Get().Cast<ManagementObject>() let status = (string)device.GetPropertyValue("Status") where !string.IsNullOrEmpty(status) select status; var isAllOk = statuses.All(status => status == "OK"); if(allIsOk) { // Do something }Noe kode som skriver ut mer info: var deviceList = new ManagementObjectSearcher("Select Name, Status from Win32_PnPEntity"); var statuses = from device in deviceList.Get().Cast<ManagementObject>() let status = (string)device.GetPropertyValue("Status") where !string.IsNullOrEmpty(status) select new { Status = status, Name = (string)device.GetPropertyValue("Name") }; var isAllOk = statuses.All(device => device.Status == "OK"); Console.Write("Is all OK? "); Console.WriteLine(isAllOk ? "Yes!" : "No."); foreach(var device in statuses.Where(d => d.Status != "OK")) Console.WriteLine("{0}: {1}", device.Name, device.Status); Endret 18. juni 2014 av GeirGrusom Lenke til kommentar
tusseladdden Skrevet 18. juni 2014 Del Skrevet 18. juni 2014 Funker ikke helt, får at allisok er out of context siden den er utenom foreach. Men finnes det ikke noe som if (status.All == "OK") ? Du må deklarere allIsOk før foreach løkken Lenke til kommentar
Avean Skrevet 19. juni 2014 Forfatter Del Skrevet 19. juni 2014 var deviceList = new ManagementObjectSearcher("Select Name, Status from Win32_PnPEntity"); var allIsOk = deviceList.Get().Cast<ManagementObject>().All(device => (string)device.GetPropertyValue("Status") == "OK"); if(allIsOk) { // Do something }Her er en som fjerner alle elementer uten status også: var deviceList = new ManagementObjectSearcher("Select Name, Status from Win32_PnPEntity"); var statuses = from device in deviceList.Get().Cast<ManagementObject>() let status = (string)device.GetPropertyValue("Status") where !string.IsNullOrEmpty(status) select status; var isAllOk = statuses.All(status => status == "OK"); if(allIsOk) { // Do something }Noe kode som skriver ut mer info: var deviceList = new ManagementObjectSearcher("Select Name, Status from Win32_PnPEntity"); var statuses = from device in deviceList.Get().Cast<ManagementObject>() let status = (string)device.GetPropertyValue("Status") where !string.IsNullOrEmpty(status) select new { Status = status, Name = (string)device.GetPropertyValue("Name") }; var isAllOk = statuses.All(device => device.Status == "OK"); Console.Write("Is all OK? "); Console.WriteLine(isAllOk ? "Yes!" : "No."); foreach(var device in statuses.Where(d => d.Status != "OK")) Console.WriteLine("{0}: {1}", device.Name, device.Status); Fungerer veldig bra, sliter med at enheter dukker opp som IKKE "OK" som er helt grei. Har driver, kjører og ingen error som jeg kan se. Men det har ingenting med tråden her å gjøre, det får jeg finne ut av. Takk skal du ha Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå