Ich extrahiere einen bool
Wert aus einer (nicht generischen, heterogenen) Sammlung.
Der as
Operator darf nur mit Referenztypen verwendet werden, daher ist es nicht möglich, as
einen Safe-Cast zu verwenden, um bool
:
// This does not work: "The as operator must be used with a reference type ('bool' is a value type)"
object rawValue = map.GetValue(key);
bool value = rawValue as bool;
Gibt es etwas Ähnliches, das getan werden kann, um ein Objekt sicher in einen Werttyp umzuwandeln, ohne dass die Möglichkeit besteht InvalidCastException
, dass der Wert aus irgendeinem Grund kein Boolescher Wert ist?
bool value; if(rawValue is bool) value = (bool)rawValue; else { // something is not right...
quelle
Sie haben nicht definiert, was passieren soll, wenn rawValue nicht in bool konvertierbar ist. Häufig können Sie false, null oder eine Ausnahme zurückgeben. Es besteht auch die Möglichkeit, dass die Zeichenfolgendarstellung von rawValue in einen Bool konvertierbar ist, z. B. Ja / Nein, Richtig / Falsch, 1/0 usw.
Ich würde bool.TryParse verwenden, um die Konvertierung durchzuführen. Dies ist erfolgreich, wenn rawValue ein Bool ist oder sein Zeichenfolgenwert "True" oder "False" ist.
bool result; if (!bool.TryParse(rawValue as string, out result)) { // you need to decide what to do in this case }
quelle
Sie können es
bool?
mit demas
Schlüsselwort in a umwandeln und dieHasValue
Eigenschaft überprüfen .quelle
Vorausgesetzt, Sie müssen keinen Verweis auf die behalten
rawValue
, ist hier ein Einzeiler, der dieGetValueOrDefault()
Methode derNullable<T>
Struktur verwendet:bool value = (map.GetValue(key) as bool?).GetValueOrDefault();
Sie können auch einen Standardwert mithilfe der Methodenüberladung angeben
GetValueOrDefault(T)
.quelle
Ich habe diese Prüfung verwendet, bevor ich etwas mit dem Objekt gemacht habe
if(myCrazyObject.GetType().Equals(typeof(bool))) { //do smt with it }
quelle
Wenn das Ziel darin besteht, nur dann true zu haben , wenn das Rohobjekt boolesch ' true ' ist, reicht ein Einzeiler aus
(rawValue as bool?)?? false
:object rawValue=null (rawValue as bool?)?? false false rawValue="some string" (rawValue as bool?)?? false false rawValue=true (rawValue as bool?)?? false true rawValue="true" (rawValue as bool?)?? false false rawValue=false (rawValue as bool?)?? false false rawValue="" (rawValue as bool?)?? false false rawValue=1 (rawValue as bool?)?? false false rawValue=new Dictionary<string,string>() (rawValue as bool?)?? false false`
quelle
Sie können auch einfach tun, wenn es passt:
if(rawValue is true) { //do stuff }
quelle
Sie können auch Convert.ToBoolean (rowValue) ausprobieren.
quelle