Как по умолчанию значения нулевого сеанса для пустых строк в C#

Я привык использовать VB.net для веб-программирования.

часто, у меня что-то вроде:

Dim s as string = Session("s")

Я получаю строковое значение s из веб-сессии. Если в веб-сеансе нет значения, я получаю пустую строку.

однако, AFAIK, в C#, я должен иметь что-то вроде кода ниже, чтобы сделать то же самое.

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

есть ли более простой способ сделать это?

3 ответов


Это быстрый способ сделать это:

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

это литой сессия["s"] в строку, и если это не null, верните значение. Если он равен null, он вернет пустую строку. В "a ?? b "выражение по существу то же самое, что и"a != null ? a:b" (?? компилируется более эффективно, хотя)

что-то еще, чтобы иметь в виду: вы не должны использовать исключения для нормального логики приложения.


поскольку string является ссылочным типом, то nullable, поэтому вы можете проверить пусто или null с помощью строку.IsNullOrEmpty (s):

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

в противном случае (а Филипп Leybaert говорит) можно использовать ?? оператор.


Я почти согласен с Филиппом, но он работает только в том случае, если "s" присутствует в сеансе, иначе будет исключение KeyNotFoundException. Этот код проверяет его, но не решает проблему NULL Филиппа.

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

таким образом, чтобы охватить обе возможности, он становится MRE сложным:

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

это на самом деле не облегчает, но производительность должна быть лучше, чем поймать исключение.