用户将在文本框中输入分隔字符串,还是将输入单独的字符串,然后您的代码将这些字符串构建为分隔字符串?
在第一种情况下,最好重新考虑您的 UI。例如,用户可以一次在文本框中输入一个字符串,然后在每个字符串之后单击“添加到列表”按钮。
在第二种情况下,使用什么分隔符并不重要。选择您喜欢的任何角色,只要确保您避开该角色的任何其他出现。
编辑
由于其他答案上的几个 cmets 都在询问代码,所以这里有一种创建逗号分隔字符串的方法,使用反斜杠作为转义字符:
public static string CreateDelimitedString(IEnumerable<string> items)
{
StringBuilder sb = new StringBuilder();
foreach (string item in items)
{
sb.Append(item.Replace("\\", "\\\\").Replace(",", "\\,"));
sb.Append(",");
}
return (sb.Length > 0) ? sb.ToString(0, sb.Length - 1) : string.Empty;
}
以下是将逗号分隔的字符串转换回单个字符串集合的方法:
public static IEnumerable<string> GetItemsFromDelimitedString(string s)
{
bool escaped = false;
StringBuilder sb = new StringBuilder();
foreach (char c in s)
{
if ((c == '\\') && !escaped)
{
escaped = true;
}
else if ((c == ',') && !escaped)
{
yield return sb.ToString();
sb.Remove(0, sb.Length);
}
else
{
sb.Append(c);
escaped = false;
}
}
yield return sb.ToString();
}
下面是一些用法示例:
string[] test =
{
"no commas or backslashes",
"just one, comma",
@"a comma, and a\ backslash",
@"lots, of\ commas,\ and\, backslashes",
@"even\\ more,, commas\\ and,, backslashes"
};
string delimited = CreateDelimitedString(test);
Console.WriteLine(delimited);
foreach (string item in GetItemsFromDelimitedString(delimited))
{
Console.WriteLine(item);
}