C # 等效于 SQLServer 中的 IsNull()函数

在 SQLServer 中,可以使用 IsNull()函数检查某个值是否为空,如果为空,则返回另一个值。现在我想知道 C # 中是否有类似的东西。

例如,我想做这样的事情:

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

而不是:

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

谢谢。

218372 次浏览

它被称为空合并(??)操作符:

myNewValue = myValue ?? new MyValue();

遗憾的是,没有与使用 DBNull 的 null 合并运算符等价的运算符; 为此,需要使用三值运算符:

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

为了使用 DB Null,我为我的 VB 应用程序创建了一组。我把它们称为 Cxxx2,因为它们类似于 VB 的内置 Cxxx 函数。

您可以在我的 CLR 扩展项目中看到它们

http://www.codeplex.com/ClrExtensions/SourceControl/FileView.aspx?itemId=363867&changeSetId=17967

This is meant half as a joke, since the question is kinda silly.

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

这是一个扩展方法,但是它扩展了 System.Object,所以现在使用的每个对象都有一个 IsNull ()方法。

然后你可以通过以下方法节省大量的代码:

if (foo.IsNull())

而不是超级无聊:

if (foo == null)

使用 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())

你写两个函数

    //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;
}
}

They Work Very Well

我对 DataRow 类型使用了以下扩展方法:

    public static string ColumnIsNull(this System.Data.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");

I'm checking for the existence of the column first because if none of query results has a non-null value for that column, the DataTable object won't even provide that column.

使用以下方法。

    /// <summary>
/// Returns replacement value if expression is null
/// </summary>
/// <param name="expression"></param>
/// <param name="replacement"></param>
/// <returns></returns>
public static long? IsNull(long? expression, long? replacement)
{
if (expression.HasValue)
return expression;
else
return replacement;
}


/// <summary>
/// Returns replacement value if expression is null
/// </summary>
/// <param name="expression"></param>
/// <param name="replacement"></param>
/// <returns></returns>
public static string IsNull(string expression, string replacement)
{
if (string.IsNullOrWhiteSpace(expression))
return replacement;
else
return expression;
}
    public static T IsNull<T>(this T DefaultValue, T InsteadValue)
{


object obj="kk";


if((object) DefaultValue == DBNull.Value)
{
obj = null;
}


if (obj==null || DefaultValue==null || DefaultValue.ToString()=="")
{
return InsteadValue;
}
else
{
return DefaultValue;
}


}


//This method can work with DBNull and null value. This method is question's answer