Joh*_*son 16 c# theory conditional-operator
我用C#?运算符,当我有if语句影响一行,这一切都很好.但是让我说我有这个代码(使用经典的if语句):
if(someStatement)
{
someBool = true; //someBools value is unknown
}
else
{
//Do nothing
}
Run Code Online (Sandbox Code Playgroud)
这可以通过以下方式在单线上实现:
someBool = (someStatement) ? true : someBool;
Run Code Online (Sandbox Code Playgroud)
但为什么我不能这样做:
someBool = (someStatement) ? true : ;
//or possibly
someBool = (someStatement) ? true;
Run Code Online (Sandbox Code Playgroud)
这有可能吗?如果是,使用一种方法比另一种方法有什么好处吗?如果没有,为什么你不能这样做?
Wee*_*ble 17
你可以做:
someBool = (someStatement) ? true : someBool;
Run Code Online (Sandbox Code Playgroud)
我不认为这会让你更清楚:
if (someStatement)
{
someBool = true;
}
Run Code Online (Sandbox Code Playgroud)
但这似乎是一个品味问题.我不会说两者都显然不好,但前者并不常见,所以我可能会避免它.
你问为什么你不能像这样使用运算符:
someBool = (someStatement) ? true : ;
Run Code Online (Sandbox Code Playgroud)
这将是一个非常大的语言变化!请记住,赋值看起来像这样:
<location> = <expression>;
Run Code Online (Sandbox Code Playgroud)
计算表达式以给出一些值,并将该值存储在位置中.(根据位置是变量,属性,字段还是索引表达式,"存储"操作可能会有很大不同.)
在这里,你提出右边的表达式的值,除了它的正常值,可以是一个"无变化"值,它具有特殊的行为,当你在赋值语句中使用它时,它不会导致存储操作发生.这与任何其他正常值不同,并且可能令人惊讶.但是如果你在其他地方使用它会是什么意思?
// Does this call DoSomething when cond is false?
// If so, what value is passed to it?
someObject.DoSomething(cond?x:);
// What happens here if cond is false? Does it cancel
// the entire assignment?
int x = 77 + (cond?2:) * 3 - 4;
// If cond is false, are methods F1 and F2 called or not called?
int x = F1() + (cond?2:) + F2();
// What does this do? Does it skip the return if cond is false?
return (cond?2:);
Run Code Online (Sandbox Code Playgroud)
我认为你很难在所有这些情况下为操作员提出合理,直观和一致的行为,我认为除了简单的任务之外,它不会有任何用处.它只是不适合语言的其他部分 - 包括它会使语言更难学习,阅读,理解,实施和解释.只是一点点简洁,这是不值得的.
Jon*_*eet 16
基本上,您正在尝试将条件运算符用于不是为其设计的事物.
它并不意味着可选择采取某些行动 ......它意味着评估一个或另一个表达式,这是表达式的结果.
如果您只想在满足某些条件时执行操作,请使用if语句 - 这正是它的用途.
在您的示例中,您可以使用:
// Renamed someStatement to someCondition for clarity
someBool |= someCondition;
Run Code Online (Sandbox Code Playgroud)
要么
someBool = someCondition ? true : someBool;
Run Code Online (Sandbox Code Playgroud)
......换句话说"除非someCondition是真的,否则"使用现有价值......但就个人而言,我认为原始if陈述更清晰.