这段代码与“?”有什么关系?和“??”意思?

时间:2013-02-16 23:34:27

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

这种语法是什么意思?我正在使用这段代码编写c#4.0编码。

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

如果我要写它,我会在IF语句中怎么做?

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

2 个答案:

答案 0 :(得分:4)

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

var name = somevalue ?? "Default Name";

如果somevalue为空,则会指定值“默认名称”

还单身?是一个三元运算符,基本上你这样使用它:

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

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

答案 1 :(得分: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;