【问题标题】:StringBuilder Is not working When its under ForEach loopStringBuilder 在 ForEach 循环下不工作
【发布时间】:2019-01-02 10:29:05
【问题描述】:

这里我有一些名字但是名字没有绑定到字符串生成器

var x=from n in d.Employee
 Where n.EmpId==10
select n

 foreach (var master in x)
            {
                StringBuilder sb = new StringBuilder();
                StringBuilder abc = new StringBuilder();
                sb.Append(master.CANDIDATE_NAME + ",";
                abc.Append(sb);
                join_Body = new HrEmailsender()
                {
     Body = "Hi," + abc +                   
                };

请给我解决此问题的占用者提示

【问题讨论】:

  • foreach 循环之外声明你的StringBuilder
  • 该行 sb.Append(master.CANDIDATE_NAME + ","; 将无法编译,因为它错过了结束 )
  • 另外请检查abc.Append(sb); 是否真的是你想要的。似乎也很多余。
  • @nilsK - 它甚至会编译吗?你能附加一个StringBuilder 实例吗?
  • 我猜,没有测试过。但是有一个Append 的重载,它接受Object

标签: c# stringbuilder


【解决方案1】:

您正在每个循环中创建一个新的字符串构建器 (sb, abc),但您只需要一个在每个循环中添加内容的字符串构建器,请在循环之外创建字符串构建器:

var x=from n in d.Employee
     Where n.EmpId==10
    select n

                    StringBuilder sb = new StringBuilder();
                    StringBuilder abc = new StringBuilder();

     foreach (var master in x)
                {

                    sb.Append(master.CANDIDATE_NAME + ",");
                    abc.Append(sb);
                    join_Body = new HrEmailsender()
                    {
         Body = "Hi," + abc +                   
                    };

【讨论】:

  • @DUKLEOSTEUS 非常感谢您的努力
【解决方案2】:

您必须在每个循环外部声明字符串生成器。 还应在 foreach 循环之后生成消息正文,以便包含所有名称。

var x=from n in d.Employee
      Where n.EmpId==10
      select n

StringBuilder sb = new StringBuilder();
StringBuilder abc = new StringBuilder();

foreach (var master in x)
{
    sb.Append(master.CANDIDATE_NAME + ",");
    abc.Append(sb);

}
join_Body = new HrEmailsender()
{
    Body = "Hi," + abc.ToString();                  
};

【讨论】:

  • Choudhari 非常感谢您的价值反馈,它工作得很好
猜你喜欢
  • 2015-02-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-02-19
  • 2020-02-02
相关资源
最近更新 更多