C# ? 不带其他部分的运算符

C# ? 不带其他部分的运算符,c#,theory,conditional-operator,C#,Theory,Conditional Operator,我用C#?运算符,当我有影响一行的if语句时,一切都很好。但假设我有以下代码(使用经典的if语句): 这可以通过以下操作在一个衬里上实现: someBool = (someStatement) ? true : someBool; 但为什么我不能这样做: someBool = (someStatement) ? true : ; //or possibly someBool = (someStatement) ? true; someBool = (someStatement) ? true

我用C#?运算符,当我有影响一行的if语句时,一切都很好。但假设我有以下代码(使用经典的if语句):

这可以通过以下操作在一个衬里上实现:

someBool = (someStatement) ? true : someBool;
但为什么我不能这样做:

someBool = (someStatement) ? true : ;
//or possibly
someBool = (someStatement) ? true;
someBool = (someStatement) ? true : ;
<location> = <expression>;

这在某种程度上是可能的吗?如果是,使用一种方法比另一种方法有什么好处?如果没有,为什么你不能这样做呢?

基本上,你是在尝试使用条件运算符来处理它不适用的东西

这并不意味着有选择地采取一些行动。。。这意味着对一个表达式或另一个表达式求值,这就是表达式的结果

如果您只想在满足某些条件时执行操作,请使用
If
语句—这正是它的目的

在您的示例中,您可以使用:

。。。换句话说,“除非
someCondition
为真,否则使用现有值……但就我个人而言,我认为原始的
if
语句更清晰。

您可以:

someBool = (someStatement) ? true : someBool;
我认为这并不能让你对以下问题有太多的了解:

if (someStatement)
{
    someBool = true;
}
但这似乎真的是一个品味的问题。我不会说这两种都很糟糕,但前者并不常见,所以我可能会避免


您会问为什么不能像这样使用运算符:

someBool = (someStatement) ? true : ;
//or possibly
someBool = (someStatement) ? true;
someBool = (someStatement) ? true : ;
<location> = <expression>;
这将是一个很大的语言变化!请记住,作业是这样的:

someBool = (someStatement) ? true : ;
//or possibly
someBool = (someStatement) ? true;
someBool = (someStatement) ? true : ;
<location> = <expression>;

我想你会发现,在所有这些情况下,很难为操作员想出明智、直观和一致的行为,而且我认为除了简单的作业之外,它在任何地方都不会有用。它只是不适合语言的其他部分——包括它会使语言更难学习、阅读和理解,实现和解释。仅仅因为一点点简洁就不值得了。

一些背景:我们经常使用这样的结构:

sql = "SELECT x FROM table WHERE Y " + (condition ? " AND Column = 1" : "");
我们在Razor视图中也使用类似的构造

<div class='someclass @(condition ? "anotherclass" : "")'></div>
用法:

<div class='someclass @condition.Then("anotherclass")'></div>


摘自

你希望表达式
(someStatement)?true:
(someStatement)?true
计算为@O.R.Mapper true,如果someStatement为真,则为真;如果someStatement为假,则为不变(这个问题纯粹是假设性的,不是我的实际问题)什么是不变的?表达式必须计算为具体的值,在本例中,类型为
bool
——即
true
false
@O.R.Mapper unchanged表示如果someBool之前为true,那么它仍然为true。如果为false,那么它仍然为false。语句
(someStatement)和正确:
或语句
(someStatement)?true
可能知道
someBool
的值是什么。它们只能返回基于输入的值,即完全基于
someStatement
-的值,或者返回一个常量,即
true
false
。若要在表达式的同等有效上下文中使用表达式语法,请想象此调用:
DoSomethingWithBool(someStatement?true)
-如果
someStatement
在这里是
false
,将传递给
DoSomethingWithBool
的参数是什么?bummer:/我个人认为条件运算符更漂亮。@JohanHjalmarsson:查看我的编辑,了解如何使用它-但实际上,它是用来计算表达式的。记住,它只是一个exp是的,我知道,第二个选项是我使用的。我只是好奇除了这个和一个正常的if之外是否还有其他的方法-statement@JohanHjalmarsson:您可以在
bool
上编写一个扩展方法,这样您就可以编写
someCondition.MaybeReplace(ref current,newValue)
。但那将是非常可怕的…这实际上让我笑了^^可怕的回答!是的,我甚至没有想过它将如何在语言中实现。如果(someStatement)someBool=true,那么使用一行程序有什么问题吗?