Gå til innhold

Hvordan spørre alle strings


Anbefalte innlegg

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
Videoannonse
Annonse

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

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

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

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

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 av GeirGrusom
Lenke til kommentar
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

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 konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...