2008-10-03 3 views
85

В SQL Server вы можете использовать функцию IsNull(), чтобы проверить, имеет ли значение значение NULL, а если оно есть, возвращает другое значение. Теперь мне интересно, есть ли что-то подобное в C#.C# эквивалент функции IsNull() в SQL Server

Например, я хочу сделать что-то вроде:

myNewValue = IsNull(myValue, new MyValue()); 

вместо:

if (myValue == null) 
    myValue = new MyValue(); 
myNewValue = myValue; 

Спасибо.

ответ

162

Это называется нулевой коалесцирующем (??) Оператор:

myNewValue = myValue ?? new MyValue(); 
+3

Я пытался для использования оператора нуль-коалесцирования, но продолжал получать ошибку * Op erator '??' не может применяться к операндам типа «bool?» и 'int' *. Ошибка была введена в заблуждение. Проблема заключалась в том, что я пытался назначить int в правой позиции операнда логической переменной. Мне пришлось перейти от `this.BinaryExists = vModel.BinaryExists ?? 0; `to` this.BinaryExists = vModel.BinaryExists ?? ложь; `. – Kuyenda 2011-07-07 14:00:26

12

К сожалению, нет никакого эквивалента нулевого оператора коалесценции, который работает с DBNull; для этого, вам нужно использовать тройной оператор:

newValue = (oldValue is DBNull) ? null : oldValue; 
+14

Nitpick: Я знаю, что многие места называют это тройным оператором. На данный момент существует только один тернарный оператор, но это свойство, а не его имя. Это действительно условный оператор. Если C# когда-либо наберет другого троичного оператора, будет много запутанных книг. – 2008-10-04 06:42:31

+0

вы можете наложить dbnull на объект ((object) oldValue ?? (объект) DBNull.Value)) – 2011-03-02 19:17:09

+1

@JeremyGray `(object) oldValue ?? (объект) DBNull.Value) `будет равнодействовать` ((object) oldValue == null)? (объект) DBNull.Value: (object) oldValue`, который отличается от решения, решаемого Робертом Россни. – Trisped 2013-01-26 00:35:32

-11

Это означало половину в шутку, так как этот вопрос является своего рода глупо.

public static bool IsNull (this System.Object o) 
{ 
    return (o == null); 
} 

Это метод расширения, однако он расширяет System.Object, так что каждый объект, который вы используете в настоящее время имеет метод IsNull().

Затем вы можете сохранить тонны кода, выполнив:

if (foo.IsNull()) 

вместо супер хромает:

if (foo == null) 
5

Используйте метод Equals:

object value2 = null; 
Console.WriteLine(object.Equals(value2,null)); 
2
public static T isNull<T>(this T v1, T defaultValue) 
{ 
    return v1 == null ? defaultValue : v1; 
} 

myValue.isNull(new MyValue()) 
Смежные вопросы