是否可以在三元表达式上只放置一个选项?

ter*_*der 7 c# syntax dictionary ternary-operator conditional-statements

我只是好奇这是否可能,或者是否有办法使其成为 C# 的有效语法:

expression == value ? /*do nothing here, or put some empty block like { ; } */ : SomeClass.SomeMethod();
Run Code Online (Sandbox Code Playgroud)

编辑:为了深入讨论和更多信息,我认为这个块会起作用(如果测试的字典键不存在,它会添加字典。否则,它将跳过):

(!packageDict.ContainsKey(desc)) ? packageDict.Add(desc, subtotal) : /*does nothing*/;
Run Code Online (Sandbox Code Playgroud)

Oli*_*ver 6

通过查看您的代码片段,这里使用三元运算根本没有意义。

你所能做的就是:

if (!packageDict.ContainsKey(desc))
    packageDict.Add(desc, subtotal)
Run Code Online (Sandbox Code Playgroud)


Pat*_*man 5

不,这是有道理的。expression你的无操作行动会是什么?null?和原来一样吗?编译器应该如何知道这一点?

例如,这将使变量保持未设置状态。这里是什么expression

var expression == value ? : SomeClass.SomeMethod();
Run Code Online (Sandbox Code Playgroud)

只要明确你的期望,所以要么这样:

expression == value ? null : SomeClass.SomeMethod();

expression == value ? default(Expression) : SomeClass.SomeMethod();
Run Code Online (Sandbox Code Playgroud)

value或者这样可以在true时保持变量相同:

expression == value ? expression : SomeClass.SomeMethod();

if (!value) expression = SomeClass.SomeMethod();
Run Code Online (Sandbox Code Playgroud)