var response = filterContext.Response = filterContext.Response ?? new HttpResponseMessage();两个等于号是什么意思?大佬详细解答下这句语句所有的点,谢啦。

解决方案 »

  1.   

    等于这样
    filterContext.Response = filterContext.Response ?? new HttpResponseMessage();
    var response = filterContext.Response;
      

  2.   

    等效
    if( filterContext.Response==null)

    filterContext.Response=new HttpResponseMessage();
    }var response=filterContext.Response;
      

  3.   

    两个问好啊。害我找了半天等号
    a??b代表  a如果是null,就赋值b
      

  4.   

    var response = filterContext.Response = filterContext.Response ?? new HttpResponseMessage();这就像 
    int a=0;
    int b=0;
    int? c=null;
    a=b=(c??1);从右到左。  c??1   当 c==null 赋值1,
    然后将结果给b,接着b的结果给a。
      

  5.   

    这是C#几的糖,我到现在还记得老师当年讲BASIC的时候专门讲过赋值不可以连续赋值的事情。
      

  6.   

    类似于var response = filterContext.Response;
    if(response == null)
    {
            response = new HttpResponseMessage();
            filterContext.Response = new HttpResponseMessage();
    }不过个人看法,我是严重反对这种故作高深,从高空摔下来还需要在空间转体360度的方式。代码可读性为第一要素,除非这样写有明显的效率差别。
      

  7.   


    Sorry,括号中第二句应当是filterContext.Response = response,按址引用关系了。
      

  8.   

    空合并运算符(??):用于定义可空类型和引用类型的默认值。如果此运算符的左操作数不为null,则此运算符将返回左操作数,否则返回右操作数。例如:a??b 当a为null时则返回b,a不为null时则返回a本身
      

  9.   

    上面都已经说明白了 意思就是
    var response = (filterContext.Response = filterContext.Response ?? new HttpResponseMessage());
    这样明白了吧
      

  10.   

    ??相当于三元运算符的简版
    a=b?c:d;
    (如果b为真,那么a=c,如果b为假,那么a=d)a=b??c;
    (如果b为null,那么a=c,否则a=b)
    其实也就等同于
    a = (b==null?c:b)