标签: conditional-operator

C#条件AND(&&)OR(||)优先级

我们一直在工作中进入不必要的编码论证.今天我询问条件AND(&&)或OR(||)是否具有更高的优先级.我的一个同事坚持认为他们有同样的优先权,我有疑虑,所以我查了一下.

根据MSDN AND(&&)具有比OR(||)更高的优先级.但是,你能向持怀疑态度的同事证明这一点吗?

http://msdn.microsoft.com/en-us/library/aa691323(VS.71).aspx

bool result = false || true && false; // --> false
// is the same result as
bool result = (false || true) && false; // --> false
// even though I know that the first statement is evaluated as 
bool result = false || (true && false); // --> false
Run Code Online (Sandbox Code Playgroud)

所以我的问题是你如何用代码证明AND(&&)的优先级高于OR(||)?如果你的答案无关紧要,那么为什么用这种语言建立?

c# conditional conditional-operator operator-precedence associativity

70
推荐指数
4
解决办法
5万
查看次数

三元运算符?:vs if ... else

在C++中,?:运算符比if()... else语句更快?它们在编译代码中有什么区别吗?

c++ performance conditional-operator

69
推荐指数
4
解决办法
9万
查看次数

条件运算符不能隐式转换?

我对这个小C#quirk感到有点难过:

给定变量:

Boolean aBoolValue;
Byte aByteValue;
Run Code Online (Sandbox Code Playgroud)

以下编译:

if (aBoolValue) 
    aByteValue = 1; 
else 
    aByteValue = 0;
Run Code Online (Sandbox Code Playgroud)

但这不会:

aByteValue = aBoolValue ? 1 : 0;
Run Code Online (Sandbox Code Playgroud)

错误说:"不能隐式地将类型'int'转换为'byte'."

当然,这个怪物会编译:

aByteValue = aBoolValue ? (byte)1 : (byte)0;
Run Code Online (Sandbox Code Playgroud)

这里发生了什么?

编辑:

使用VS2008,C#3.5

c# types conditional-operator implicit-cast

61
推荐指数
3
解决办法
4797
查看次数

在`typeid`代码中奇怪地使用`?:`

在我正在研究的其中一个项目中,我看到了这段代码

struct Base {
  virtual ~Base() { }
};

struct ClassX {
  bool isHoldingDerivedObj() const {
    return typeid(1 ? *m_basePtr : *m_basePtr) == typeid(Derived);
  }
  Base *m_basePtr;
};
Run Code Online (Sandbox Code Playgroud)

我从来没有见过这样的typeid用法.为什么它会做那种奇怪的舞蹈?:,而不仅仅是做typeid(*m_basePtr)?有什么理由吗?Base是一个多态类(带有虚拟析构函数).

编辑:在这个代码的另一个地方,我看到这个,它似乎是等价的"多余的"

template<typename T> T &nonnull(T &t) { return t; }

struct ClassY {
  bool isHoldingDerivedObj() const {
    return typeid(nonnull(*m_basePtr)) == typeid(Derived);
  }
  Base *m_basePtr;
};
Run Code Online (Sandbox Code Playgroud)

c++ conditional-operator typeid micro-optimization

60
推荐指数
2
解决办法
1967
查看次数

使用Nullable <value>类型的条件运算符赋值?

EmployeeNumber =
string.IsNullOrEmpty(employeeNumberTextBox.Text)
    ? null
    : Convert.ToInt32(employeeNumberTextBox.Text),
Run Code Online (Sandbox Code Playgroud)

我经常发现自己想要做这样的事情(EmployeeNumberNullable<int>因为它是在LINQ到SQL的DBML对象,其中列允许NULL值的属性).不幸的是,编译器认为"'null'和'int'之间没有隐式转换",即使这两种类型在对自己的可空int的赋值操作中都是有效的.

由于内联转换需要在.Text字符串上发生(如果它不为空),因此Null合并运算符不是我能看到的选项.

据我所知,唯一的方法是使用if语句和/或分两步进行分配.在这种特殊情况下,我发现非常令人沮丧,因为我想使用对象初始化器语法,这个赋值将在初始化块中...

谁知道更优雅的解决方案?

c# nullable conditional-operator

58
推荐指数
3
解决办法
2万
查看次数

python中一行lambda函数中的条件语句?

如果以前曾经问过这个问题,我会道歉,但我无法在任何地方看到它.

基本上我遇到过一个场景,我需要在lambda函数中使用if语句.困难之处在于理想情况下它需要在一行代码中(如果可能的话甚至可能?)

通常,我会这样写:

T = 250

if (T > 200):
    rate = 200*exp(-T)
else:
    rate = 400*exp(-T)

return (rate)
Run Code Online (Sandbox Code Playgroud)

但是我需要它看起来像这样:

rate = lambda(T) : if (T>200): return(200*exp(-T)); else: return(400*exp(-T))
Run Code Online (Sandbox Code Playgroud)

我意识到更容易做的事情是在lambda函数之外做出决策,然后为每个case都有一个单独的lambda函数,但它不适合这里.lambda函数存储在一个数组中,并在需要时访问,每个数组元素对应一个特定的"速率",因此对于相同的"速率"有两个单独的行会弄乱.任何帮助将不胜感激,或如果它不可能,其他人的一些确认将是不错的:)

python lambda if-statement ternary-operator conditional-operator

57
推荐指数
5
解决办法
11万
查看次数

C#if-null-then-null表达式

只是为了好奇/方便:C#提供了两个我知道的很酷的条件表达式功能:

string trimmed = (input == null) ? null : input.Trim();
Run Code Online (Sandbox Code Playgroud)

string trimmed = (input ?? "").Trim();
Run Code Online (Sandbox Code Playgroud)

对于我经常遇到的情况,我想念另一个这样的表达:

如果输入引用为null,则输出应为null.否则,输出应该是访问输入对象的方法或属性的结果.

我在第一个例子中完成了这一点,但是(input == null) ? null : input.Trim()非常冗长且难以理解.

这种情况是否有另一个条件表达式,或者我可以??优雅地使用运算符吗?

.net c# conditional-operator conditional-expressions

55
推荐指数
5
解决办法
3万
查看次数

C中的三元(条件)运算符

条件运算符需要什么?在功能上它是多余的,因为它实现了if-else结构.如果条件运算符比等效的if-else赋值更有效,为什么编译器不能更有效地解释if-else?

c operators ternary-operator conditional-operator

53
推荐指数
9
解决办法
10万
查看次数

三元运算符行为不一致

以下表达式是可以的

short d = ("obj" == "obj" ) ? 1 : 2;
Run Code Online (Sandbox Code Playgroud)

但是当您像下面一样使用它时,会发生语法错误

short d = (DateTime.Now == DateTime.Now) ? 1 : 2;
Run Code Online (Sandbox Code Playgroud)

无法将类型'int'隐式转换为'short'.存在显式转换(您是否错过了演员?)

任何人都可以解释为什么会这样吗?

在三元运算符中比较字符串到字符串和datetime到datetime之间有区别吗,为什么?

如果你能帮助我,我将不胜感激.

c# int casting short conditional-operator

51
推荐指数
2
解决办法
1535
查看次数

Javascript一行If ... else ... else if statement

我知道如果/ else语句可以用一行设置变量var variable = (condition) ? (true block) : (else block),但是我想知道是否有办法在那里放置else if语句.任何建议将不胜感激,谢谢大家!

javascript conditional-operator

49
推荐指数
6
解决办法
12万
查看次数