我只是不明白为什么下面的陈述没有像我期望的那样进行评估。
将UserFirstName
设置为“Joe”并将UserLastName
设置为“Plumber”,SpeakerName
只获得“Joe”。
spr.SpeakerName = presenterRec.UserFirstName ?? "" + " " +
presenterRec.UserLastName ?? "";
思想?
答案 0 :(得分:14)
因为如果presenterRec.UserFirstName
不为null,则获得该值,并且表达式的评估将在那里停止。
换句话说,您有一个操作订单问题。试试这个:
spr.SpeakerName = (presenterRec.UserFirstName ?? "")
+ " " +
(presenterRec.UserLastName ?? "");
答案 1 :(得分:5)
null-coalescing运算符的优先级非常低,如MSDN所述。
如上所述,解决方案是添加括号
(presenterRec.UserFirstName ?? "")
+ " " +
(presenterRec.UserLastName ?? "")
但是,在.NET中的字符串连接中,空字符串被视为空字符串,因此实际上是
presenterRec.UserFirstName + " " + presenterRec.UserLastName
也适用于这种特殊情况。