Domanda

In SQL Server è possibile utilizzare la funzione IsNull () per verificare se un valore è null e, in caso affermativo, restituire un altro valore. Ora mi chiedo se c'è qualcosa di simile in C #.

Ad esempio, voglio fare qualcosa del tipo:

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

anziché:

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

Grazie.

È stato utile?

Soluzione

Si chiama l'operatore null coalescenza ( ?? ):

myNewValue = myValue ?? new MyValue();

Altri suggerimenti

Purtroppo, non c'è equivalente all'operatore null coalescing che lavora con DBNull; per questo, è necessario utilizzare l'operatore ternario:

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

Utilizza il metodo 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())

Per lavorare con DB Nulls, ho creato un gruppo per le mie applicazioni VB. Li chiamo Cxxx2 in quanto sono simili alle funzioni Cxxx integrate di VB.

Puoi vederli nel mio progetto di estensioni CLR

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

Scrivi due funzioni

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

Funzionano molto bene

Ho usato il seguente metodo di estensione sui miei tipi di 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;
    }

utilizzo:

MyControl.Text = MyDataTable.Rows[0].ColumnIsNull("MyColumn");
MyOtherControl.Text = MyDataTable.Rows[0].ColumnIsNull("AnotherCol", "Doh! I'm null");

Sto verificando prima l'esistenza della colonna perché se nessuno dei risultati della query ha un valore non nullo per quella colonna, l'oggetto DataTable non fornirà nemmeno quella colonna.

Usa i metodi seguenti.

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

Questo significa metà per scherzo, dato che la domanda è piuttosto sciocca.

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

Questo è un metodo di estensione, tuttavia estende System.Object, quindi ogni oggetto che usi ora ha un metodo IsNull ().

Quindi puoi salvare tonnellate di codice facendo:

if (foo.IsNull())

invece del super zoppo:

if (foo == null)
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top