2010-10-20 7 views
6

Sono abituato a utilizzare VB.net per la programmazione Web.Come predefinire valori di sessione nulli a stringhe vuote in C#

Spesso, ho qualcosa di simile:

Dim s as string = Session("s") 

ottengo un valore stringa per s dalla sessione web. Se non c'è alcun valore nella sessione web, ottengo una stringa vuota.

Tuttavia, AFAIK, in C#, devo avere qualcosa di simile al codice qui sotto per fare la stessa cosa.

string s; 
try { s = Session["s"].ToString(); } 
catch { s = ""; } 

C'è un modo più semplice per farlo?

+1

In VB, si ottiene Nothing se si tenta di recuperare una variabile di sessione che non esiste. La maggior parte del mio codice di recupero della sessione assomiglia a: Dim s As String = Session ("S") If Not String.IsNullOrEmpty (s) Then DoSomethingWithS (s) End If –

risposta

15

Questo è un modo rapido di fare questo:

s = (string)Session["s"] ?? ""; 

Questo lancerà Session [ "s"] in una stringa, e se non è nullo, restituire il valore. Se è nullo, restituirà una stringa vuota. Il "a ?? b" L'espressione è essenzialmente lo stesso di "a != null ? a:b" (?? è compilato in modo più efficiente però)

Un'altra cosa da tenere a mente: non si dovrebbe mai usare eccezioni per la logica normale applicazione.

+0

Breve, dolce. Nessuna funzione aggiuntiva. Mi piace. – NotMe

+0

La seguente sintassi potrebbe essere più chiara: String Test = (Session ["Test"] ?? String.Empty) .ToString(); – Moo

+0

Non è più pulito, ma è più sicuro se Session ["Test"] non è una stringa (che credo non sia il caso qui) –

-3

Sono quasi d'accordo con Philippe, ma funziona solo se "s" è presente nella sessione, altrimenti ci sarà una KeyNotFoundException. Questo codice lo controlla, ma non risolve il problema NULL di Philippe.

s= Session.ContainsKey("s")?Session["s"]:""; 

in modo da coprire entrambe le possibilità, diventa complesso MRE:

s = Session.ContainsKey("s")?(Session["s"]??""):""; 

Essa in realtà non rendono più facile, ma le prestazioni dovrebbero essere migliore di cattura un'eccezione.

+0

Non credo che lanci una tale eccezione. La documentazione (all'indirizzo http://msdn.microsoft.com/en-us/library/f0yd7k72.aspx) riporta: "Il valore nella raccolta con il nome specificato Se la chiave specificata non viene trovata, il tentativo di ottenerlo restituisce null, e il tentativo di impostarlo crea un nuovo elemento utilizzando la chiave specificata. " –

+0

Infatti, Session restituirà null se la chiave non viene trovata. Non genera un'eccezione –

+0

Sì, nella domanda originale è la chiamata .ToString() che genera l'eccezione. –

0

Poiché stringa è di tipo riferimento allora è annullabile, cosicchè è possibile controllare per vuoto o nullo mediante string.IsNullOrEmpty (s):

string s = string.IsNullOrEmpty((string)strObject) ? string.Empty : strObject.ToString(); 

Altrimenti (come dice Philippe Leybaert) si poter usare ?? operatore.

+0

La stringa è un tipo di riferimento, pertanto è sempre annullabile. Il tuo codice non viene nemmeno compilato perché 'string?' Non è una sintassi valida. –

+0

Hai ragione Philippe, la stringa è un tipo di riferimento. Ho cambiato il mio codice per riflettere tale idea. – ArBR

Problemi correlati