| 

.NET C# Java Javascript Exception

4
IF (BEDINGUNGA) or (BEDINGUNGB) Warum geht vb wenn Bedingung A erfüllt ist trozdem in Bedinung B?
11.08.2011
Gast
43 3
4 Antworten
5
Wollte schon fast "Weil" sagen, ... aber. Wie Hornbrille schon schrieb werden beide Konditionen getestet. Das ist beim Or-Operator so der Fall. Siehe hierzu auch :
Or in der MSDN

Wenn du das nicht möchtest, dann verwende doch "OrElse"

Siehe hierzu OrElse in der MSDN

Edit sagt: Das gibt es bei C# auch. Dort wird "|" oder "||" resp. "&" oder "&&" verwendet.
11.08.2011
Karl 958 1 8
Karl 958 1 8
Danke :D So etwas habe ich gesucht.
– Gast 11.08.2011
4
Der Vollständigkeit halber...

Der Grund ist, dass And, Or, Not und Xor bit-Operatoren sind. Jedes bit aus jedem Teilausdruck wird verwendet und miteinander verrechnet. Daher müssen auch alle Teil-Ausdrücke ausgewertet werden. Der bit-Operator weiß natürlich nicht, dass das Ergebnis zu einem boolean werden soll (das kann man ihm mittels AndAlso und OrElse zustecken).

In VB.net wird True zu -1 (ein int-Datentyp, bei dem alle bits 1 sind). Nur deswegen klappt die Berechnung auch mit boolschen Werten. False ist als 0 definiert (alle bits 0).

Beispiel
a = 1 Or b = 2

Wenn jetzt a=2 und b=2 ist, dann kommt bei der Berechnung ja folgendes raus
False Or True

Was interne aber soviel bedeutet wie
0 Or -1

Da eine bitweise Berechnung stattfinden soll, wird intern folgende bit-Berechnung durchgeführt
0 Or 1 = 1 // bit 0
0 Or 1 = 1 // bit 1
0 Or 1 = 1 // bit 2
0 Or 1 = 1 // bit 3
0 Or 1 = 1 // bit 4
0 Or 1 = 1 // bit 5
0 Or 1 = 1 // bit 6
0 Or 1 = 1 // bit 7

Ein int-Datentyp mit lauter gesetzten bits ist (wie oben schon gesagt) -1, und erst ander Stelle wird dieser Wert zu einem boolean. also in dem Fall True.

AndAlso und OrElse funktionieren im Prinzip genauso, nur wird nach jedem Teilausdruck geprüft, ob es überhaupt weitergehen kann...
12.08.2011
WolfgangKluge 1,0k 2 7
2
Weil du in VB dann OrElse verwenden musst anstadt Or.

if (BedingungA) OrElse (BedingungB) then
//...
end if
11.08.2011
Floyd 14,6k 3 9
Danke.. geht aber nur ab vb 2010 habe es jetzt mit elseif gelöst.
– Gast 11.08.2011
1
Laut MSDN geht es ab Visual Studio 2003
http://msdn.microsoft.com/en-us/library/ea1sssb2(v=vs.71).aspx
Martin Fuchs 11.08.2011
Richtig, das geht mind. seit .net 2.0 .. ober vorher weiß ich nicht.
Floyd 11.08.2011
1
Der Vollständigkeit halber: bei logischen Ausdrücken kann statt des And auch ein AndAlso verwendet werden.
Bei And werden beide Ausdrücke ausgewertet, bei AndAlso nur dann beide, wenn der erste true war.
jsc 11.08.2011
1
Das geht schon seit .net 1.0 beta 2.
Ursprünglich (in Bezug auf die erste vb.net beta) gab es die boolschen Operatoren Or, And, Xor und die bit-Operatoren BitOr, BitAnd, BitXor und BitNot.

Nachdem aber die VB-Community aufgeschrien hat (ungefähr so wie jetzt bei Windows 8 und HTML5/Javascript - mehr oder weniger unverständlich, aber so ist es nun mal), haben sie es in der Beta2 wieder Rückgängig gemacht.. Seitdem sind Or, And, Xor und Not wieder bit-Operatoren.
Dafür kam dann aber OrElse und AndAlso dazu, um wenigstens die If-Abfragen vereinfachen zu können..

Ein Zeitzeuge ;)
WolfgangKluge 12.08.2011
1
Weil der Ausdruck erst nach Vorlage beider Ergebnisse ausgewertet wird, so weit ist mein Kenntnisstand. Ansonsten versuch oder mach es doch mit einem
Select Case blabla
Case BedingungA,BedingungB
...
...
End Select
11.08.2011
Hornbrille 193 1 6

Stelle deine Programmieren-Frage jetzt!