PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : C# Warum else nciht gültig?


Lord_X
2008-08-04, 20:36:06
Hallo :)

Kurze Frage zu diesem Code. Warum ist die "else" Bedingung nicht gültig?

private void button1_Click(object sender, EventArgs e)
{
DriveInfo[] allDrives = DriveInfo.GetDrives();
foreach (DriveInfo drive in allDrives)
{
if (drive.DriveType.ToString() == "Network")
{
richTextBox1.Text = richTextBox1.Text + ("Gefundene Laufwerke:") + "\n";
richTextBox1.Text = richTextBox1.Text + (drive.Name) + "\n";
}
else(drive.DriveType.ToString()!="Network")
{
richTextBox1.Text = richTextBox1.Text + ("Kein Netz-Laufwerk gefunden!");
}
}
}


Ohne else funktioniert es natürlich.
Wenn ich es so mache, läuft die Schlaufe durch else, weil ich ja ein Laufwerk C: und D: (DVD) habe...


private void button1_Click(object sender, EventArgs e)
{
DriveInfo[] allDrives = DriveInfo.GetDrives();
foreach (DriveInfo drive in allDrives)
{
if (drive.DriveType.ToString() == "Network")
{
richTextBox1.Text = richTextBox1.Text + ("Gefundene Laufwerke:") + "\n";
richTextBox1.Text = richTextBox1.Text + (drive.Name) + "\n";
}
else
{
richTextBox1.Text = richTextBox1.Text + ("Kein Laufwerk gefunden!");
}
}
}


Kann mir das jemand erklären?
Vielen Dank

Gast
2008-08-04, 20:39:13
Weil du stattdessen else if() schreiben musst!

Lord_X
2008-08-04, 20:47:30
Weil du stattdessen else if() schreiben musst!

Kannst du mir das genau beschreiben?
Irgendwie klappt das nicht...

Coda
2008-08-04, 20:59:29
Was willst du eigentlich machen? Der Code sieht nicht so aus als würde er Sinn ergeben.

Du enumerierst die ganzen Laufwerke. Okay. Aber ob überhaupt ein Netzlaufwerk gefunden wurde, musst du anders machen, sonst fügst du ja immer die "Keine Netzwerkgeräte gefunden" Nachricht hinzu.

Das muss eher so aussehen:
private void button1_Click(object sender, EventArgs e)
{
DriveInfo[] allDrives = DriveInfo.GetDrives();
String message;

foreach (DriveInfo drive in allDrives)
{
if(drive.DriveType.ToString() == "Network")
{
message = message + drive.Name + "\n";
}
}

if(richTextBox1.Text == "")
{
richTextBox1.Text = "Kein Netz-Laufwerk gefunden!";
}
else
{
richTextBox1.Text = "Gefundene Laufwerke:\n" + message;
}
}

Lord_X
2008-08-04, 21:06:37
Was willst du eigentlich machen? Der Code sieht nicht so aus als würde er Sinn ergeben.

Du enumerierst die ganzen Laufwerke. Okay. Aber ob überhaupt ein Netzlaufwerk gefunden wurde, musst du anders machen, sonst fügst du ja immer die "Keine Netzwerkgeräte gefunden" Nachricht hinzu.

Ich lass mir in der Text-Box alle Laufwerke auflisten, welche "Netzlaufwerke" sind.
Wenn aber kein Netzlaufwerk verfügbar ist, soll er eben die Meldung "Kein Netz-Laufwerk gefunden!" in die Text-Box schreiben. Leider klappt das nicht.

Coda
2008-08-04, 21:06:48
Siehe Edit.

Lord_X
2008-08-04, 21:13:17
Siehe Edit.

Hast du deinen Code getestet? Bei mir geht es nicht:

Fehler 1 Verwendung der nicht zugewiesenen lokalen Variablen "message" C:\Form1.cs 30 31 netz

Coda
2008-08-04, 21:14:55
Nein habe ich natürlich nicht. Das solltest du aber selber fixen können.

Lord_X
2008-08-04, 21:23:29
Nein habe ich natürlich nicht...

Sorry aber dein Code ist ... naja sagen wir mal "nicht dass, was ich brauche".

Gast
2008-08-04, 21:45:48
Ohne jetzt geschaut zu haben was inhaltlich du machst, warum schreibst du nicht einfach:


if (drive.DriveType.ToString() == "Network")
{
//...
}
else
{
//...
}


?

samm
2008-08-04, 21:50:31
Wenn dein Code genau das macht, was du willst, bis auf die Tatsache, dass das "else" nicht funktioniert, dann halt dich an den Gast:
else(drive.DriveType.ToString()!="Network")Das geht nicht, weil else keine Bedingung nimmt. Ersetze einfach "else" durch "else if" resp. "elseif" (hab C# gerade nicht präsent genug).

Das ist aber nicht sinnvoll, weil die Bedingung ohnehin schon die verneinte Bedingung des "if"-Teils ist, deswegen macht ein einfaches else (ohne weitere Bedingung) genau das gleiche wie ein else if(drive.DriveType.ToString()!="Network")

TheGamer
2008-08-04, 21:59:42
Sorry aber dein Code ist ... naja sagen wir mal "nicht dass, was ich brauche".


Sein Code macht genau das was du geschrieben hast was du willst.

Coda
2008-08-05, 00:18:41
Sorry aber dein Code ist ... naja sagen wir mal "nicht dass, was ich brauche".
Wenn du zu faul bist rauszufinden warum das Stückchen nicht kompiliert dann bin ich dafür das dir einfach mal gar keiner mehr hilft hier.

Dafür ist jedem seine Zeit zu schade.

RattuS
2008-08-05, 00:39:08
Der Threadstarter muss such erst einmal die Grundlagen aneignen: http://galileocomputing.de/openbook/csharp/

DocEW
2008-08-05, 09:46:50
Ich glaube hier hast du dich vertan, was vielleicht Lord_X verwirrt hat:
if(message == "")
{
richTextBox1.Text = "Kein Netz-Laufwerk gefunden!";
}
else
{
richTextBox1.Text = "Gefundene Laufwerke:\n" + message;
}
}
Und dann noch die fehlende Initialisierung - fertig. Aber vorsicht: Ist auch nicht getestet. ;)

P.S.: Benutzt man in C# kein equals zum Stringvergleich?

Tiamat
2008-08-05, 11:33:54
Der Unterschied ist folgender.
Ein einfacher else-Zweig bedeutet << in jedem anderem Fall >>, mit einem else if fügst du eine weitere Bedingung ein, mit dem Unterschied, dass alle anderen Fälle unberücksichtigt bleiben. Da du hier aber nur auf == und != prüfst, reicht eine if-else Konstruktion völlig aus..
Gruß
Tiamat

gr@fz@hL
2008-08-05, 12:01:15
P.S.: Benutzt man in C# kein equals zum Stringvergleich?

Doch, tut man.

PatkIllA
2008-08-05, 13:08:47
Doch, tut man.
Muss man aber wohl nicht mehr, da der == Operator überladen ist, dass er Equals aufruft.

Das Wandeln der Enumeration und dann einen Stringvergleich zu machen ist schon überflüssig (und zumindest relativ gesehen deutlich langsamer).

Lord_X
2008-08-05, 13:51:31
Der Unterschied ist folgender.
Ein einfacher else-Zweig bedeutet << in jedem anderem Fall >>, mit einem else if fügst du eine weitere Bedingung ein, mit dem Unterschied, dass alle anderen Fälle unberücksichtigt bleiben. Da du hier aber nur auf == und != prüfst, reicht eine if-else Konstruktion völlig aus..
Gruß
Tiamat

Vielen Dank für deine Antwort. Es läuft jetzt ohne Probleme.
Hatte gestern noch was verwechselt.

Habe es jetzt so verglichen:

DriveInfo[] allDrives = DriveInfo.GetDrives();
foreach (DriveInfo drive in allDrives)
{
if (drive.DriveType == DriveType.Network)
{
}......


Lord_x

Tiamat
2008-08-05, 14:55:39
Ich hab mich noch nie mit C# beschäftigt, doch anhand einiger Codebeispiele fühle ich mich oft an Java erinnert , bin ich da recht in der Annahme ?

RattuS
2008-08-05, 15:37:00
Ja. C# hat u.a. Java als Vorbild.