2011-02-02 2 views
4

У меня очень простой вопрос C#: не следующие ли утверждения равны при работе с пустой строкой?Оператор нуль-коалесценции соответствует пустой строке?

s ?? "default"; 

или

(!string.IsNullOrEmpty(s)) ? s : "default"; 

Я думаю: так string.Empty!=null, оператор слияния может установить результат первого оператора на пустое значение, когда то, что я действительно хочу это второй. Поскольку строка каким-то образом является специальным (== и! = Перегружены для сравнения значений), я просто хотел спросить экспертов C#, чтобы убедиться.

спасибо.

ответ

15

Да, вы правы - они не то же самое и так, как вы указали.

Если вы не счастливы с первой формой, вы могли бы написать расширение:

public static string DefaultIfNullOrEmpty(this string x, string defaultValue) 
{ 
    return string.IsNullOrEmpty(x) ? defaultValue : x; 
} 

, то вы можете просто написать:

s.DefaultIfNullOrEmpty("default") 

в основной код.

+0

+1 для расширения: D –

Смежные вопросы