如何将一些带条件的字符串连接在一起
本文关键字:字符串 连接 在一起 条件 | 更新日期: 2023-09-27 18:11:28
我有下一个代码:
string result = string.Join(",",
someCondition1 ? str1 : string.Empty,
someCondition2 ? str2 : string.Empty,
someCondition3 ? str3 : string.Empty,
//some other conditions like those
......
);
如果我有:
someCondition1 = true; str1 = "aaa";
someCondition2 = false; str2 = "bbb";
someCondition3 = true; str3 = "ccc";
然后结果看起来像"aaa,,ccc",但我需要"aaa, ccc"(没有空字符串)。哪一种方法最好?
不如这样写:
// Or use a List<string> or whatever...
string[] strings = new string[] { someCondition1 ? str1 : null,
someCondition2 ? str2 : null,
someCondition3 ? str3 : null };
// In .NET 3.5
string result = string.Join(",", strings.Where(x => x != null));
你真的需要有六个独立的变量吗?如果您已经有一个值和条件的集合(无论是单独的还是一起的),那么它将更加优雅。
直接输入一些if语句怎么样?
StringBuilder result = new StringBuilder();
if(someCondition1)
result.Append(str1);
if(someCondition2)
result.Append(str2);
if(someCondition3)
result.Append(str3);
如果您打算经常这样做,您可能想要构造自己的类来以一种很好的方式为您做这件事。我并不是说这是最好的方法,但是制作这些东西总是很有趣的:
public static class BooleanJoiner
{
public static string Join(params Tuple<bool, string>[] data)
{
StringBuilder builder = new StringBuilder();
int curr = 0;
foreach (Tuple<bool, string> item in data)
{
if (item.Item1)
{
if (curr > 0)
builder.Append(',');
builder.Append(item.Item2);
}
++curr;
}
return builder.ToString();
} // eo Join
}
用法:
string result = BooleanJoiner.Join(new Tuple<bool, string>(true, "aaa"),
new Tuple<bool, string>(false, "bbb"),
new Tuple<bool, string>(true, "ccc"));
甚至可以这样使用
string result = (someCondition1 ? str1 + "," : String.Empty + (someCondition2 ? str2
+ ",": String.Empty) + (someCondition3 ? str3 : String.Empty);