Entwickler-Ecke

Basistechnologien - Array durchsuchen


Ccenter - Di 21.09.10 20:20
Titel: Array durchsuchen
Moin,
ich versuche gerade einen Array zu durchsuchen:


C#-Quelltext
1:
2:
3:
Process[] p = Process.GetProcesses();
if (((IList<string>)p).Contains("firefox"))
{...}


Wo bitte ist denn mein Fehler bzw wie müsste es richtig lauten?


Christian S. - Di 21.09.10 20:28

Du castest eine Array aus Prozessen in eine Liste aus Strings. Das kann nicht funktionieren ;-)

Und dürfte eigentlich auch überflüssig sein, die Extension Methods sollten alle mit einem Array funktionieren.


Yogu - Di 21.09.10 20:41

user profile iconChristian S. hat folgendes geschrieben Zum zitierten Posting springen:
Und dürfte eigentlich auch überflüssig sein, die Extension Methods sollten alle mit einem Array funktionieren.

Das Problem ist ja, dass er den Firefox-Prozess nicht hat, sondern nur seinen Namen.

Die einfachste Lösung wäre wohl Process.GetProcessesByName [http://msdn.microsoft.com/de-de/library/z3w4xdc9.aspx] ;)

Grüße,
Yogu


Christian S. - Di 21.09.10 20:51

Die Extension Methods nehmen ja IIRC alle Lambda-Ausdrücke, da kann man dann auch den Namen prüfen :-)

In diesem Fall sollte Dein Vorschlag aber wirklich einfacher sein.


traceurmicha - Mi 29.09.10 10:22

Ich bin jetzt einfach mal so dreist und beantworte die simple Frage:

Zitat:
ich versuche gerade einen Array zu durchsuchen
Wo bitte ist denn mein Fehler bzw wie müsste es richtig lauten?


ich würde ein Array so durchsuchen:


C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
for(int i = 0;i<tempArray.Lenght;i++)
{
    if(tempArray[i].Contains("firefox"))
    {
        //Tu etwas
    }
}


Sorry falls ich das Thema verfehlt hab, will nur behilflich sein^^


Ccenter - Mi 29.09.10 18:59

Ich hab mein Problem jetzt quick&dirty gelöst: Einfach mit einer whileschleife mit try/catch, welche getprocessbyname durchführt.
Die Methode von traceurmicha ist natürlich schöner, werde ich ausbessern. Danke!


Kha - Mi 29.09.10 19:10

Was passt dir denn an user profile iconYogus Vorschlag nicht?


Yogu - Mi 29.09.10 22:11

user profile icontraceurmicha hat folgendes geschrieben Zum zitierten Posting springen:
ich würde ein Array so durchsuchen:


C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
for(int i = 0;i<tempArray.Lenght;i++)
{
    if(tempArray[i].Contains("firefox"))
    {
        //Tu etwas
    }
}

Naja, vielleicht ein Array aus Strings, aber sicher kein Array aus Prozessen, wie es Process.GetProcess [http://msdn.microsoft.com/de-de/library/1f3ys1f9.aspx] zurückgibt, oder?

user profile iconCcenter hat folgendes geschrieben Zum zitierten Posting springen:
Ich hab mein Problem jetzt quick&dirty gelöst: Einfach mit einer whileschleife mit try/catch, welche getprocessbyname durchführt.

Wofür brauchst du eine Schleife und wo wird eine Ausnahme geworfen? Wenn du genau einen Firefox-Prozess brauchst, kannst du doch einfach prüfen, ob die Länge >= 1 ist und dann auf das Element mit dem Index 0 zugreifen. Brauchst du alle, gehst du eben alle durch, aber eine Ausnahme dürfte trotzdem nicht entstehen :gruebel:


traceurmicha - Do 30.09.10 08:25

@Yogu:

Das durchsuchen der Prozesse würd ich dann so machen:


C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
Process[] p = Process.GetProcesses();
            for (int i = 0; i < p.Length; i++)
            {
                if (p[i].ToString().Contains("firefox"))
                {
                    //Tu etwas
                }
            }


Ccenter - Do 30.09.10 14:25

Yogus Vorschlag hab ich doch angenommen und umgesetzt ;)

user profile iconCcenter hat folgendes geschrieben Zum zitierten Posting springen:
Ich hab mein Problem jetzt quick&dirty gelöst: Einfach mit einer whileschleife mit try/catch, welche getprocessbyname durchführt.
Die Methode von traceurmicha ist natürlich schöner, werde ich ausbessern. Danke!


Was ich wohl leider vergessen habe zu sagen ist, dass ich durchgehend prüfen möchte ob ein bestimmter Process läuft. Aber es läuft jetzt ja =)