c# - 在循环中创建的分隔字符串

标签 c# .net sql loops

我正在寻找在循环中创建与另一个字符串分隔的字符串的最佳方法。我的意思是,例如,SQL 阅读器:

StringBuilder sb = new StringBuilder();
while(reader.Read())
{
  sb.Append(reader[0]);
  sb.Append("<br />");
}
string result = sb.ToString();
result = result.Remove(result.LastIndexOf("<br />")); // <-

或创建 SQL 查询字符串;

StringBuilder sb = new StringBuilder();
foreach(string v in values)
{
  sb.Append(v);
  sb.Append(",");
}
string query = sb.ToString()
query = query.Remove(query.LastIndexOf(",")); // <-
query = String.Concat("INSERT INTO [foo] ([bar]) VALUES(", query, ")");

这是我发现的最好的:

List<string> list = new List<string>;
while(reader.Read())
{
  list.Add(reader[0]);
}
string result = String.Join("<br />", list.ToArray());

编辑: 我知道 StringBuilder,为了清楚起见,我没有在这里使用它。我的一般想法是不要使用 Remove/LastIndexOf !

最佳答案

我不是 StringBuilder 的粉丝,除非你真的知道你需要担心性能。它会产生难看的代码。我会这样写...

private IEnumerable<string> ReadAllStrings(DataReader reader)
{
    while(reader.Read())
        yield return reader[0];
}


String.Join("<br />", ReadAllStrings(reader).ToArray());

如果我经常这样做,我可能会考虑一种扩展方法:

public static class Extensions
{
    public static string JoinWith(this IEnumerable<string> strings, string separator)
    {
        return String.Join(separator, strings.ToArray());
    }
}

然后,我的代码将如下所示:

ReadAllStrings(reader).JoinWith("<br />");

关于c# - 在循环中创建的分隔字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/654054/

相关文章:

c# - 按 namespace 对列表进行排序

c# - 如何在不重复的文本框中制作图像

c# - 大括号关闭时出现 NullReferenceException

c++ - QSqlQuery::value: 未定位在有效记录上

SQL - 如何在只返回一行的同时检查一列的多个值?

MySQL:如何从命令行传递参数?

C#泛型类类型参数和与泛型参数相同的约束

.net - 避免在 StyleHelper.OnBindingValueInTemplateChanged 中发生 NullReferenceException 崩溃

.net - 在 LINQ 查询中调用 ToList() 还是 ToArray() 更好?

.net - 我如何查看 .NET 实习字符串