我只是尝试过的以下想法是合并两个串,替换空串空。

string a="Hello";
string b=" World";

--Debug(有趣吗?是打印,不正是帮助读...)

 ? a ?? "" + b ?? "" 

->的"你好"

正确的是:

? (a??"")+(b??"")
"Hello World"

我是那种期待"hello World",或是"世界"如果一个是空。显然,这是todo操作优先,并可以克服由括号内,是否有任何地方文件的优先顺序对这个新的操作员。

(意识到,我可能应该是用stringbuilder或串。Concat)

谢谢。

有帮助吗?

解决方案

除了你怎么会 喜欢 优先是,它是什么根据通信机制详解,它是什么根据MS规范和什么csc实际上,我有一点忠告:

不要这样做.

我认为这是 很多 更清晰写道:

string c = (a ?? "") + (b ?? "");

或者,鉴于空中的字符串连接结束了只是一个空串无论如何,只是写的:

string c = a + b;

编辑:关于记录优先顺序,在两个 C#3.0规范 (Word文档)和 通信机制详解-334, ,另外结合更严格的比??, 其结合更严格的比分配。MSDN链接在另一个答案是错误和异常,国际海事组织。有一个变化页面上显示在2008年,它移动的有条件的操作员-但是显然是错误地输入!

其他提示

从不依靠操作者的优先级。 始终明确指定您希望您的代码来行事。难道自己和别人一个忙,因为当你回到你的代码。

(a ?? "") + (b ?? "")

此没有留下余地歧义。歧义是错误的温床。

操作者优先顺序记录了 MSDN.

然而优先MSDN上违背了优先于既 下载C#规范 还从Microsoft, 规范在通信机制详解.这是一个有点奇怪。

无论,因为乔恩-斯基特说,在他的响应,最好不要依赖优先的经营者,但是明确通过使用方括号。

有趣的是 http://msdn.microsoft.com/en-us/library/6a71f45d.aspxhttp://en.csharp-online.net/ECMA-334:_14.2.1_Operator_precedence_and_associativity 给予??不同的优先级。

微信公众号:

  1. 有条件的
  2. 任务
  3. 空合并
  4. 拉姆达

欧洲管理协会:

  1. 空合并
  2. 有条件的
  3. 任务

我认为msdn一定是错误的,考虑一下:

string a = null;
string b = a ?? "foo";
// What is b now?
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top