代码之家  ›  专栏  ›  技术社区  ›  HAdes

C相当于SQL Server中的isNull()函数

  •  95
  • HAdes  · 技术社区  · 16 年前

    在SQL Server中,可以使用 IsNull() 函数检查值是否为空,如果为空,则返回另一个值。现在我想知道在C中是否有类似的东西。

    例如,我想做如下的事情:

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

    而不是:

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

    谢谢。

    9 回复  |  直到 6 年前
        1
  •  178
  •   Tim Cooper    13 年前

    它被称为空合并( ?? 操作员:

    myNewValue = myValue ?? new MyValue();
    
        2
  •  13
  •   Robert Rossney    16 年前

    遗憾的是,没有等价于使用dbnull的空合并运算符;为此,需要使用三元运算符:

    newValue = (oldValue is DBNull) ? null : oldValue;
    
        3
  •  5
  •   serializer    13 年前

    使用Equals方法:

    object value2 = null;
    Console.WriteLine(object.Equals(value2,null));
    
        4
  •  2
  •   Rudy    9 年前
    public static T isNull<T>(this T v1, T defaultValue)
    {
        return v1 == null ? defaultValue : v1;
    }
    
    myValue.isNull(new MyValue())
    
        5
  •  1
  •   Jonathan Allen    16 年前

    为了使用db nulls,我为我的vb应用程序创建了一组。我称它们为cxx2,因为它们类似于vb的内置cxxx函数。

    你可以在我的clr扩展项目中看到它们

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

        6
  •  0
  •   Mansoor Bozorgmehr    6 年前

    你写了两个函数

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

    他们工作得很好

        7
  •  0
  •   Denis M. Kitchen    6 年前

    我对数据行类型使用了以下扩展方法:

        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");
    

    我首先检查列的存在性,因为如果没有一个查询结果具有该列的非空值,则DataTable对象甚至不会提供该列。

        8
  •  0
  •   sushil suthar    6 年前

    使用以下方法。

        /// <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;
        }
    
        9
  •  -12
  •   FlySwat    16 年前

    这是半开玩笑,因为这个问题有点傻。

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

    这是一个扩展方法,但是它扩展了System.Object,所以现在使用的每个对象都有一个isNull()方法。

    然后,您可以通过执行以下操作来节省大量的代码:

    if (foo.IsNull())
    

    而不是超级跛子:

    if (foo == null)