需要帮助来理解不同的 IF 语句

Need help on understanding different IF statements

为什么这不起作用?

dictionary.ContainsKey(input) ? int value = dictionary[input] : "Not Found";

为什么会出现以下情况?

if (dictionary.ContainsKey(input)) { int values = dictionary[input]; }

第一个代码块通常称为 "inline if",用于表达式,而不是代码块。

正如 Scott 在评论中提到的,在 中它被称为 "conditional operator"。

你可以阅读它here

正确的语法是:

int value = dictionary.ContainsKey(input) ? dictionary[input] : int.MaxValue;

但我认为这会更好地匹配:

int value;

if(!dictionary.TryGetValue(input, out value))
{
    _Log.Message("Not found");
    return;
}

// Further process value...

第一个语句是错误的,因为声明和初始化一个新的局部变量是一个语句,而不是一个*表达式。条件运算符的第二个和第三个操作数需要是表达式,而不是语句。

在您的第二个代码片段中,您有一个 if 后跟大括号。这些大括号需要包含 0 到 N 语句 ,而不是表达式。声明一个局部变量在那个上下文中是有效的,而不是第一个。当然,虽然它在第二种情况下在语法上有效,但您声明了一个永远无法读取的变量,这毫无意义,这将导致警告,因为它毫无意义。