Frage

In SQL Server können Sie die IsNull() Funktion überprüfen verwenden, wenn ein Wert Null ist, und wenn es ist, zurückgeben einen anderen Wert. Jetzt frage ich mich, ob es etwas ähnliches in C # ist.

Zum Beispiel, ich mag, wie etwas tun:

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

statt:

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

Danke.

War es hilfreich?

Lösung

Es ist die Null-Koaleszenz (??) Operator genannt:

myNewValue = myValue ?? new MyValue();

Andere Tipps

Leider gibt es kein Äquivalent zu dem Null-Koaleszenz-Operator, der mit DBNull arbeitet; Dazu müssen Sie den ternären Operator verwenden:

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

Mit der Equals-Methode:

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

mit DB Nulls arbeiten, habe ich ein paar für meine VB-Anwendungen. Ich nenne sie Cxxx2 wie sie zu VB eingebauten in Cxxx Funktionen ähnlich sind.

Sie können sie in meinem CLR Extensions-Projekt finden Sie unter

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

Sie schreiben Zwei Funktion

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

Sie arbeiten sehr gut

Ich habe mit der folgenden Erweiterungsmethode auf meinen DataRow-Typen:

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

Nutzung:

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

Ich bin für die Existenz der Spalte überprüft zuerst, weil, wenn keine Abfrageergebnisse eine Nicht-Null-Wert für diese Spalte hat, wird das Datatable-Objekt nicht einmal diese Spalte liefern.

Verwenden Sie die folgenden Methoden.

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

Das ist die Hälfte als Scherz gemeint, da die Frage ein bisschen albern ist.

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

Dies ist eine Erweiterung Methode, jedoch erstreckt sie System.Object, so dass jedes Objekt, das Sie nun eine IsNull () Methode verwendet hat.

Dann können Sie Tonnen Code speichern, indem Sie:

if (foo.IsNull())

anstelle des Super lahm:

if (foo == null)
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top