【问题标题】:Loop generated string循环生成字符串
【发布时间】:2011-11-01 15:05:47
【问题描述】:

我正在尝试通过在我的数组中循环创建一个字符串。然后将字符串放在 SelectCommand 中。

foreach 循环是:

 foreach (Object obj in arrFields)
            {
                String.Join(" {0}", obj);
            }

SelectCommand 是:

 Custom.SelectCommand = "SELECT " + String.Join(", ", arrFields) + " FROM Employee WHERE Employee_ID = " + a;

我最接近让它工作的是以下

字符串新列表

            foreach (Object obj in arrFields)
            {
                newList = string.Format(" {0}", obj);
            }

 Custom.SelectCommand = "SELECT " + newList + " FROM Employee WHERE Employee_ID = " + a;

我遇到的问题是我在 FROM 之前得到了一个 ',' - 如何防止在 FROM 语句之前插入这个 ','?

【问题讨论】:

  • 可能没有直接帮助,但 String.Join 每次对现有字符串进行操作时都会提供新字符串,因此会创建大量堆字符串。使用 StringBuilder 提高效率。
  • @Zenwalker - String.Join 使用 UnSafeCharBuffer 构建字符串,不会创建中间字符串堆。
  • 您有权使用 UnSafeCharbuffer 从而使 Join 更快,但仅适用于较小的数组。

标签: c# asp.net loops arraylist


【解决方案1】:

这就是你想要的,因为arrFieldsArrayList

Custom.SelectCommand = "SELECT " + string.Join("," , arrFields.ToArray()) + 
                       " FROM Employee WHERE Employee_ID = " + a;

【讨论】:

  • 当我尝试使用那行代码时,我遇到:“无法绑定多部分标识符“System.Collections.ArrayList”。”
  • 哦,它是一个ArrayList?用 arrFields.ToArray() 替换 arrFields 就可以了。
  • 天啊!太感谢了!由于没有 .ToArray() 代码试图做什么?
  • 输入错误。事情是:string.Join 需要string[],而您传递的是ArrayList。另外,如果您认为它解决了您的问题,请记住接受答案。
【解决方案2】:

每次迭代时都在循环中替换 newList 对象。使用联系国家或 stringBuilder 提高效率

【讨论】:

  • 我认为这里不需要使用StringBuilder 来提高效率。连接的数量很少,字符串的大小也很小。在这种情况下,代码可读性将是我的首要任务。
  • 好吧,我不知道代码有多少次迭代,甚至多次在堆上创建较小的对象,我认为它不是有效的吗?可能您必须对此进行性能研究。
  • 我刚刚做了一个测试,将一个 100 个字符的字符串连接到自身 100 次 - += => 0.3966ms - StringBuilder => 0.2611ms。执行 1000 x 1000 导致 2,092 毫秒与 0.8826 毫秒。因此,对于大多数串联情况,简单的旧 += 就可以了。
  • 好吧,我还注意到,如果您在连接参数中没有指定 string[],它会在内部使用 Stringbuilder 本身来完成这项工作,就像您所说的 unSafecharbuffer!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-09-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多