Ответ 1
Он назвал нулевой коалесцирующий (??
) оператор:
myNewValue = myValue ?? new MyValue();
В SQL Server вы можете использовать функцию IsNull()
, чтобы проверить, является ли значение нулевым, а если оно есть, верните другое значение. Теперь мне интересно, есть ли что-то подобное в С#.
Например, я хочу сделать что-то вроде:
myNewValue = IsNull(myValue, new MyValue());
вместо:
if (myValue == null)
myValue = new MyValue();
myNewValue = myValue;
Спасибо.
Он назвал нулевой коалесцирующий (??
) оператор:
myNewValue = myValue ?? new MyValue();
К сожалению, нет эквивалента нулевому коалесцирующему оператору, который работает с DBNull; для этого вам нужно использовать тернарный оператор:
newValue = (oldValue is DBNull) ? null : oldValue;
Используйте метод Equals:
object value2 = null;
Console.WriteLine(object.Equals(value2,null));
public static T isNull<T>(this T v1, T defaultValue)
{
return v1 == null ? defaultValue : v1;
}
myValue.isNull(new MyValue())
Для работы с DB Nulls я создал связку для своих приложений VB. Я называю их Cxxx2, поскольку они похожи на встроенные функции Cxxx VB.
Вы можете увидеть их в моем проекте CLR Extensions
http://www.codeplex.com/ClrExtensions/SourceControl/FileView.aspx?itemId=363867&changeSetId=17967
Вы пишете две функции
//When Expression is Number
public static double? isNull(double? Expression, double? Value)
{
if (Expression ==null)
{
return Value;
}
else
{
return Expression;
}
}
//When Expression is string (Can not send Null value in string Expression
public static string isEmpty(string Expression, string Value)
{
if (Expression == "")
{
return Value;
}
else
{
return Expression;
}
}
Они работают очень хорошо
Я использовал следующий метод расширения для моих типов DataRow:
public static string ColumnIsNull(this DataRow row, string colName, string defaultValue = "")
{
string val = defaultValue;
if (row.Table.Columns.Contains(colName))
{
if (row[colName] != DBNull.Value)
{
val = row[colName]?.ToString();
}
}
return val;
}
использование:
MyControl.Text = MyDataTable.Rows[0].ColumnIsNull("MyColumn");
MyOtherControl.Text = MyDataTable.Rows[0].ColumnIsNull("AnotherCol", "Doh! I'm null");
Сначала я проверяю существование столбца, потому что, если ни один из результатов запроса не имеет ненулевое значение для этого столбца, объект DataTable даже не будет создавать этот столбец.
Это подразумевается наполовину как шутка, так как вопрос глупо.
public static bool IsNull (this System.Object o)
{
return (o == null);
}
Это метод расширения, однако он расширяет System.Object, поэтому каждый объект, который вы используете сейчас, имеет метод IsNull().
Затем вы можете сохранить тонны кода, выполнив следующие действия:
if (foo.IsNull())
вместо супер хромого:
if (foo == null)