的组合 ?和??在表达中

时间:2011-05-26 17:03:29

标签: c# asp.net-mvc-3 c#-to-vb.net

string value = ( expression ? expression ?? string: string.Method())

不知道如何解开这个。有人可以帮忙吗?

4 个答案:

答案 0 :(得分:4)

外部运营商是:? :conditional operator。这是一行if声明。

if (expression)
   first;
else
   second;

可以替换为:

expression ? first : second;

内部运算符??null-coalescing operator只返回值本身,如果不是null,或者其他值,如果值 null

x ?? y;

与(通常使用旧代码中的三元运算符表示)相同:

x != null ? x : y;

所以,你的整个陈述(一旦有效,因为我假设陈述的参数不是字面意思):

string value;

if (expression1)
{
    value = expression2 ?? "some string";
    /*
    if (expression2 != null)
    {
        value = expression2;
    }
    else
    {
        value = "some string";
    }
    */
}
else
{
    value = someMethod();
}

答案 1 :(得分:1)

示例无效,但让我们假装它 有效,然后重新格式化:

string value = (
 expression ?   // expression determines which branch to take
                expression ?? string // Null coalescing operator
            : string.Method() // Alternative branch of conditional operator
               );

现在,您是否分别了解null-coalescing operatorconditional operator?如果是这样,现在这一切都应该清楚......

答案 2 :(得分:0)

在C#中,一个? b:c表示if a b else c。

a ?? b是“if a == null然后返回b else返回a”的缩写。如果您了解SQL,请考虑“ISNULL”运算符。

我将假设“string”不是类型,而是某种常量字符串。

if (expression1)
{
    if (expression2 != null)
        value = expression2
    else
        value = string1
}
else
{
    value = string2.Method();
}

答案 3 :(得分:0)

我不确定你要做什么,因为你的表达式既是布尔值又是字符串,你不能按照你的方式使用字符串,但这就是它更详细的内容方式

string value;
if(expression)
{
  if(expressionStr != null)
    value = expressionStr;
  else
    value = string.Empty;
}
else
{
  value = string.Method(); // Don't know what this is supposed to be
}