Domanda

Un attributo XML dichiarato come xs: booleano può essere accettabile come "vero", "falso", "0". o "1". Tuttavia, in .NET, Boolean.Parse () accetterà solo " true " o "falso". Se vede un " 0 " o "1", genera un "Formato errato" fa eccezione.

Quindi, dato ciò, qual è il modo migliore per analizzare un tale valore in un booleano?

(Sfortunatamente, sono limitato alle soluzioni .NET 2.0, ma se la v3.5 offre qualcosa, mi piacerebbe saperlo.)

È stato utile?

Soluzione

Penso che XmlConvert ha tutti i metodi per la conversione tra comuni tipi di runtime della lingua e tipi XML. Soprattutto XmlConvert.ToBoolean gestisce esattamente i valori booleani (le stringhe valide sono "1" o "vero" per vero e "0" o "falso" per falso).

Altri suggerimenti

Usare CBool ?? invece di Boolean.Parse dovrebbe fare il trucco: anche se dovrai incorporarlo in un blocco try / catch (che non sarebbe necessario quando si utilizza Boolean. TryParse ), convertirà con successo la maggior parte dei valori booleani "sensibili", inclusi true / false e 0/1.

Modifica: come sottolineato in un commento, questa risposta è un po 'inutile per i programmatori C #, poiché CBool ?? è un VB-ism. Si associa a Microsoft.VisualBasic.CompilerServices.Conversions :: ToBoolean , che non è adatto al consumo generale. Il che rende la classe XMLConvert indicata nella risposta accettata un'alternativa ancora migliore.

Disinfetta i dati prima di tentare di analizzarli:

 string InnerText = yourXmlNode.InnerText;    
if (InnerText.Equals("0"))
    InnerText = "false";
else if (InnerText.Equals("1"))
    InnerText = "true";

Qualsiasi altra voce diversa da vero , falso , 0 o 1 genererà comunque un formato errato " ; eccezione (come dovrebbe essere).

return value === 'true' || Number(value)
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top