Question

Dans SQL Server, vous pouvez utiliser la fonction IsNull () pour vérifier si une valeur est null et, le cas échéant, renvoyer une autre valeur. Maintenant, je me demande s’il existe quelque chose de similaire en C #.

Par exemple, je veux faire quelque chose comme:

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

au lieu de:

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

Merci.

Était-ce utile?

La solution

C'est ce qu'on appelle l'opérateur de fusion nulle ( ?? ):

myNewValue = myValue ?? new MyValue();

Autres conseils

Malheureusement, il n’ya pas d’équivalent à l’opérateur de coalescence nul qui fonctionne avec DBNull; pour cela, vous devez utiliser l'opérateur ternaire:

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

Utilisez la méthode 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())

Pour travailler avec DB Null, j'ai créé un groupe pour mes applications VB. Je les appelle Cxxx2 car elles sont similaires aux fonctions Cxxx intégrées de VB.

Vous pouvez les voir dans mon projet Extensions CLR

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

Vous écrivez deux fonctions

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

Ils travaillent très bien

J'utilise la méthode d'extension suivante sur mes types 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;
    }

utilisation:

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

Je vérifie d'abord l'existence de la colonne, car si aucun des résultats de la requête n'a une valeur non nulle pour cette colonne, l'objet DataTable ne fournira même pas cette colonne.

Utilisez les méthodes ci-dessous.

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

Cela signifie à moitié une blague, car la question est un peu ridicule.

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

Il s'agit d'une méthode d'extension. Toutefois, System.Object est étendu. Par conséquent, chaque objet que vous utilisez a maintenant une méthode IsNull ().

Ensuite, vous pouvez économiser des tonnes de code en faisant:

if (foo.IsNull())

au lieu du super boiteux:

if (foo == null)
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top