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

时间:2012-09-25 17:49:08

标签: c# string-formatting

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

请考虑以下代码:

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

有更优雅的方法吗?

7 个答案:

答案 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)

从 C#6 开始,您可以像这样使用 string interpolation

$"Something is foo. {mssg}".TrimEnd();

.NET Fiddle

答案 5 :(得分:0)

Assert.Fail("Something is foo.{0}", message?.PadLeft(message.Lenght + 1, ' '));

答案 6 :(得分:-5)

最优雅的方法是使用String类的内置关键字。

String.IsNullOrEmpty

这样你就不会有问题了。