回答:
悲しいことに、DBNullで機能するnull融合演算子に相当するものはありません。そのためには、三項演算子を使用する必要があります。
newValue = (oldValue is DBNull) ? null : oldValue;(object)oldValue ?? (object)DBNull.Value)は((object)oldValue == null) ? (object)DBNull.Value : (object)oldValue、Robert Rossneyのソリューションが対処する問題とは異なるものと同等です。
                    public static T isNull<T>(this T v1, T defaultValue)
{
    return v1 == null ? defaultValue : v1;
}
myValue.isNull(new MyValue())
new MyValue()がmyValuenullでなくても、実行されます。
                    DB Nullを操作するために、私は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 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質問はちょっとばかげているので、これは冗談として半分を意味します。
public static bool IsNull (this System.Object o)
{
   return (o == null);
}これは拡張メソッドですが、System.Objectを拡張するため、使用するすべてのオブジェクトにIsNull()メソッドがあります。
次に、次のようにして大量のコードを節約できます。
if (foo.IsNull())スーパーラメの代わりに:
if (foo == null)Objectオブジェクトを必要とすることであり、オブジェクトがNothing(正確には、このQでテストしようとしているケース)である場合、操作する拡張クラスのインスタンスがなかったため、 NullObject例外をスローします。
                    
this.BinaryExists = vModel.BinaryExists ?? 0;ましたthis.BinaryExists = vModel.BinaryExists ?? false;。