1

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

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

如果我要写它 i IF 语句,那会怎么样?

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

4

2 回答 2

4

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

var name = somevalue ?? "Default Name";

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

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

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

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

于 2013-02-16T23:36:18.277 回答
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;
于 2013-02-16T23:41:08.003 回答