有时候我想加入两个字符串,中间有一个空格。但是如果第二个字符串为null,我不想要空格。
请考虑以下代码:
void AssertFoo(bool cond, string message = null) {
...
Assert.Fail("Something is foo.{0}", message != null ? " " + message : "");
...
}
有更优雅的方法吗?
答案 0 :(得分:25)
这是我喜欢的一个选项。如果您的数据已经有IEnumerable<string>
,那就更好了,但即使您没有,也很容易。它也可以很好地扩展到连接的n个字符串,而不仅仅是1或2个字符串。
string[] myStrings = new string[]{"Hello", "World", null};
string result = string.Join(" ", myStrings.Where(str => !string.IsNullOrEmpty(str)));
这是另一种选择。这个案例有点短,但它更难看,更难阅读,而且不是可扩展的,所以我可能会亲自避免它:
//note space added before {0}
Assert.Fail("Something is foo. {0}", message ?? "\b");
在这种情况下,我们将空格添加到格式字符串本身,但如果message
为null,我们使用退格符来删除消息中我们知道的空格。
答案 1 :(得分:1)
Assert.Fail("Something is foo.{0}", (" " + message).TrimEnd());
当然,这将导致一些字符串对象创建,但这种微优化问题不太可能在绝大多数程序中都很重要。可以认为这种方法的一个优点是它不仅处理空消息,而且还处理所有空格的消息。
答案 2 :(得分:0)
试试这个:
string joinedString = string.IsNullOrEmpty(message2) ? message1 : message1 + " " + message2;
答案 3 :(得分:0)
对于较新版本的C#,您可以使用以下扩展方法:
int is_word_guessed(const char secret[], const char letters_guessed[])
{
int x = 0;
int secret_letters = strlen(secret);
int guessed = strlen(letters_guessed);
for( int a=0; a< secret_letters;a++)
{
for (int i=0; i < guessed;i++)
{
if ( letters_guessed[i] == secret[a])
{
x =i;
continue;
}
}
if (letters_guessed[x] != secret[a])
{
return 0;
}
}
return 1;
}
可以像这样使用:
public static string Prepend(this string value, string prepend) => prepend + value;
答案 4 :(得分:0)
答案 5 :(得分:0)
Assert.Fail("Something is foo.{0}", message?.PadLeft(message.Lenght + 1, ' '));
答案 6 :(得分:-5)
最优雅的方法是使用String类的内置关键字。
String.IsNullOrEmpty
这样你就不会有问题了。