如果字符串非空,则添加到字符串

THX*_*138 9 c# string-formatting

有时我想加入两个字符串,中间有一个空格.但是如果第二个字符串为null,我不想要空格.

考虑以下代码:

void AssertFoo(bool cond, string message = null) {
    ...
    Assert.Fail("Something is foo.{0}", message != null ? " " + message : "");
    ...
}
Run Code Online (Sandbox Code Playgroud)

有更优雅的方式吗?

Ser*_*rvy 25

这是我喜欢的一个选项.如果你已经掌握了IEnumerable<string>数据,那就更好了,但即使你没有,这也很容易.它也可以很好地扩展到连接的n个字符串,而不仅仅是1或2个字符串.

string[] myStrings = new string[]{"Hello", "World", null};
string result = string.Join(" ", myStrings.Where(str => !string.IsNullOrEmpty(str)));
Run Code Online (Sandbox Code Playgroud)

这是另一种选择.这个案例有点短,但它更难看,更难阅读,而且不是可扩展的,所以我可能会亲自避免它:

//note space added before {0}
Assert.Fail("Something is foo. {0}", message ?? "\b");
Run Code Online (Sandbox Code Playgroud)

在这种情况下,我们将空格添加到格式字符串本身,但如果message为null,我们使用退格符来删除消息中我们知道的空格.