注意:这似乎已在Roslyn中修复
写我的回答时,此问题出现了这一个,其中谈到了的关联性空合并运算符.
提醒一下,null-coalescing运算符的概念就是表单的表达式
x ?? y
Run Code Online (Sandbox Code Playgroud)
首先评估x,然后:
xnull,y则进行求值,这是表达式的最终结果x是非空,y则不评估,的值x是表达的最终结果,转换到编译时间类型的后y如果需要的话现在通常不需要转换,或者它只是从可空类型到非可空类型 - 通常类型相同,或者只是从(比如说)int?到int.但是,您可以创建自己的隐式转换运算符,并在必要时使用它们.
对于简单的情况x ?? y,我没有看到任何奇怪的行为.但是,(x ?? y) ?? z我看到一些令人困惑的行为.
这是一个简短但完整的测试程序 - 结果在评论中:
using System;
public struct A
{
public static implicit operator B(A input)
{
Console.WriteLine("A to B");
return new B();
}
public static implicit operator …Run Code Online (Sandbox Code Playgroud) 我个人是三元运算符的拥护者:()?:; 我确实意识到它有它的位置,但我遇到了许多完全反对使用它的程序员,而且有些人经常使用它.
你有什么感受?你看到了什么有趣的代码?
在PHP中是否有像??C#一样的三元运算符?
?? 在C#中是干净和短,但在PHP中,你必须做的事情如下:
// This is absolutely okay except that $_REQUEST['test'] is kind of redundant.
echo isset($_REQUEST['test'])? $_REQUEST['test'] : 'hi';
// This is perfect! Shorter and cleaner, but only in this situation.
echo null? : 'replacement if empty';
// This line gives error when $_REQUEST['test'] is NOT set.
echo $_REQUEST['test']?: 'hi';
Run Code Online (Sandbox Code Playgroud)
return
true ? 'a' :
false ? 'b' :
'c';
这应该返回'a',但它不会.它返回'b'.PHP处理条件运算符的不同部分的顺序是否存在错误?
我从这种情况下的多个条件运算符得到了一个好主意吗?它看起来似乎正常工作.
(当然,真实和假是为了示例的目的.在实际代码中,它们分别是评估为真和假的语句.是的,我知道这肯定)