Pregunta

En SQL Server puede usar la función IsNull () para verificar si un valor es nulo y, si lo es, devolver otro valor. Ahora me pregunto si hay algo similar en C #.

Por ejemplo, quiero hacer algo como:

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

en lugar de:

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

Gracias.

¿Fue útil?

Solución

Se llama operador de unión nula ( ?? ):

myNewValue = myValue ?? new MyValue();

Otros consejos

Lamentablemente, no hay ningún equivalente al operador de unión nula que trabaja con DBNull; para eso, necesitas usar el operador ternario:

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

Usa el método de Igualdad:

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

Para trabajar con DB Nulls, creé un grupo para mis aplicaciones de VB. Los llamo Cxxx2 porque son similares a las funciones Cxxx integradas de VB.

Puedes verlos en mi proyecto de extensiones CLR

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

Escribe dos funciones

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

Funcionan muy bien

He estado usando el siguiente método de extensión en mis tipos de 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;
    }

uso:

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

Primero estoy revisando la existencia de la columna porque si ninguno de los resultados de la consulta tiene un valor no nulo para esa columna, el objeto DataTable ni siquiera proporcionará esa columna.

Utilice los siguientes métodos.

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

Esto se entiende a medias como una broma, ya que la pregunta es un poco tonta.

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

Este es un método de extensión, sin embargo, extiende System.Object, por lo que cada objeto que usa ahora tiene un método IsNull ().

Luego puedes guardar toneladas de código haciendo:

if (foo.IsNull())

en lugar del súper cojo:

if (foo == null)
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top