C# 中 ?? 操作符是什么意思?
怎么用?

解决方案 »

  1.   

    就是如果为null,则运行后面的,否则返回前面的。
    相当于
    obj = obj1 ?? new Object()if (obj == null)
       obj = new Object();
    else
       obj = obj1;
      

  2.   

    在三目操作中,判断表达式是否为null,如果为null,则执行问号后的表达式,否则就是问号前表达式的结果。
    如:string a=null;  string b=a??1;  此时b=1. 
      

  3.   

    可空类型Nullable
    接合运算符??
    int? x = null; 
    int y = x ?? -1; // X is null y为-1
    相当于 int y = x.HasValue ? x.GetValueOrDefault() : -1
      

  4.   

    ??可能是一个被遗忘的运算符,很少看到有人用它,它的用法很简单却很实用:
    variable ?? defaultValue
    相当于
    variable == null ? defaultValue : variable
    有了它,一行便能搞定Lazy Evaluation了:
    使用??之前:static UserAccess Users
    {
        get
         {
            if (_users == null)
             {
                 _users = Proxy.GetQueryObject<UserAccess>();
             }
            return _users;
         }
    }
    之后:static UserAccess Users
    {
        get
         {
            return _users ?? (_users = Proxy.GetQueryObject<UserAccess>());
         }
    }
    注:这个运算符只支持引用类型和Nullable类型。
      

  5.   

    又一个问这个问题的兄弟
    ?? 表示可以让值类型的值为null(null是引用类型才能用的)
    为什么要这么做?
    因为.Net讲泛型:
    object o=null;
    int?? x=null;
    if(o==x)
    如果没有那两个问号,这个IF语句就是错的(.Net为了泛型而泛型强造出来的东西)
      

  6.   

     int?? x=null;老兄是什么版本的C#
      

  7.   

    可空运算符的赋值,null的话就赋值
      

  8.   

    new SqlParameter("@code",(object)cl.Code?? DBNull.Value)如果非空则为左面值,如果为空则为右面值。Parameter不能插入null值的解决办法……