【问题标题】:What does this code with "?" and "??" mean?这段代码用“?”表示什么?和 ”??”意思是?
【发布时间】:2013-02-16 23:34:27
【问题描述】:

这个语法是什么意思?我目前正在编写 c# 4.0,当时我是通过这段代码来的。

_data = (SerializationHelper.Deserialize(Request.Form[_dataKey])
             ? TempData[_dataKey] ?? new ProfileData ()) as ProfileData;

如果我要写IF语句会怎么样?

编译器给了我一个错误,因为我没有写 : 以及需要更多的东西吗?

【问题讨论】:

  • @pst 我做到了!但正如你看到的代码有问题,所以我认为发生了一些特别的事情。但你说得对,我应该写那个..!

标签: c# asp.net-mvc syntax operators


【解决方案1】:

??表示如果它为空,则使用其他值。例如

var name = somevalue ?? "Default Name";

如果somevalue 为空,它将分配值“默认名称”

还有单曲?是三元运算符,基本上你是这样使用的:

var example = (conditional statement here) ? value_if_true : value_if_false;

但是,当我正确查看时,您的代码似乎没有遵循三元运算符的正确语法,正如 Corey 所说,您可能错过了 ?关闭一个??。

【讨论】:

    【解决方案2】:

    您好像错过了?。我怀疑它应该是这样写的:

    _data = (SerializationHelper.Deserialize(Request.Form[_dataKey])
                ?? TempData[_dataKey]
                ?? new ProfileData()
            ) as ProfileData;
    

    在 C# 中,操作 A ?? B 直接等效于 (A == null ? B : A),或者如果您愿意,也可以使用 if (A == null) return B; return A;

    所以你上面的陈述相当于:

    object tmp = SerializationHelper.Deserialize(Request.Form[_dataKey]);
    if (tmp == null)
    {
        tmp = TempData[_dataKey];
        if (tmp == null)
            _tmp = new ProfileData();
    }
    _data = tmp as ProfileData;
    

    【讨论】:

      猜你喜欢
      • 2016-03-28
      • 1970-01-01
      • 1970-01-01
      • 2016-12-16
      相关资源
      最近更新 更多