SQL ServerのIsNull()関数に相当するC#
-
05-07-2019 - |
質問
SQL Serverでは、 IsNull()
関数を使用して値がnullかどうかを確認し、nullの場合は別の値を返すことができます。今、私はC#に似たようなものがあるかどうか疑問に思っています。
たとえば、次のようなことをしたい:
myNewValue = IsNull(myValue, new MyValue());
代わりに:
if (myValue == null)
myValue = new MyValue();
myNewValue = myValue;
ありがとう。
解決
これは、null合体( ??
)演算子と呼ばれます:
myNewValue = myValue ?? new MyValue();
他のヒント
残念ながら、DBNullで動作するnull合体演算子に相当するものはありません。そのためには、三項演算子を使用する必要があります:
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アプリケーション用の束を作成しました。 VBの組み込みCxxx関数に似ているため、Cxxx2と呼びます。
CLR拡張プロジェクトでそれらを見ることができます
http://www.codeplex.com/ClrExtensions /SourceControl/FileView.aspx?itemId=363867&changeSetId=17967
2つの関数を記述します
//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 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");
最初に列の存在を確認します。クエリ結果にその列にnull以外の値がない場合、DataTableオブジェクトはその列を提供することさえしないためです。
以下のメソッドを使用します。
/// <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 bool IsNull (this System.Object o)
{
return (o == null);
}
これは拡張メソッドですが、System.Objectを拡張するため、使用するすべてのオブジェクトにIsNull()メソッドがあります。
次の操作を行うと、大量のコードを保存できます。
if (foo.IsNull())
スーパーラメの代わりに:
if (foo == null)
所属していません StackOverflow