我可以在foreach中使用StringBuilder元素吗?

时间:2013-02-11 18:06:31

标签: c# .net arrays foreach stringbuilder

由于我使用的是.NET 1.1,因此我不能使用通用的字符串列表,因为泛型不是语言的一部分。所以我正在尝试使用StringBuilder,但得到这个错误的消息:

“foreach语句无法对'System.Text.StringBuilder'类型的变量进行操作,因为'System.Text.StringBuilder'不包含'GetEnumerator'的定义,或者它不可访问” < / p>

使用此代码:

public StringBuilder linesToSend;
. . .

foreach (string _line in this.linesToSend)
{
    serialPort.Write(_line);
}

我的代码有什么问题,或者StringBuilder是否真的不允许使用foreach循环?如果是后者,那么String []是我最好的追索权吗?

6 个答案:

答案 0 :(得分:4)

老问题,我知道,但可能有用的东西:

如果您的每个字符串都是使用.AppendLine构建的,或者您插入了新行,则可以执行

string[] delim = { Environment.NewLine, "\n" }; // "\n" added in case you manually appended a newline
string[] lines = StringBuilder.ToString().Split(delim, StringSplitOptions.None);
foreach(string line in lines){
    // Do something
}

答案 1 :(得分:2)

StringBuilder不会存储您追加的行。它只是用于构建最终字符串。假设您已经将所有内容添加到StringBuilder,您可以执行以下操作:

// Write the complete string to the serialPort
serialPort.Write(linesToSend.ToString());

答案 2 :(得分:2)

StringBuilder只构建一个字符串,那么你怎么能foreach得到一整串字符串呢?

如果您需要逐行编写,可以使用ArrayList,将每个行字符串添加到其中,将foreachstring一起添加为foreach变量类型( Object将投放到String)。或者甚至更好,使用StringCollection(感谢Anthony Pegram对原始问题的评论;我忘记了这个课程。)

但为什么不升级到更新版本的.NET?

答案 3 :(得分:2)

这是对的。 StringBuilder旨在帮助您构建其他人已声明的最终输出字符串。

如果您需要使用可变数量的字符串,则可以使用ArrayList并对其进行迭代。

ArrayList strings = new ArrayList();
// populate the list
foreach (string str in strings) {
  // do what you need to.
}

如果您担心数组列表可能包含其他对象(因为它没有强类型),您可以安全地转换它:

foreach (object obj in strings) {
  string str = obj as string;
  // If null strings aren't allowed, you can use the following
  // to skip to the next element.
  if (str == null) {
    continue;
  }
}

答案 4 :(得分:2)

foreach循环通过从接口GetEnumerator调用IEnumerable来工作,该接口将返回foreach用于获取对象的下一个元素的枚举器。

StringBuilder未实施允许IEnumerable工作的IEnumerable<T>foreach。在这种情况下,最好使用string[]StringCollection,完成后,您可以使用StringBuilder连接集合。

例如:

StringBuilder stringBuilder = new StringBuilder();
foreach(string line in array)
{
    serialPort.Write(line);
    stringBuilder.Append(line);
}

答案 5 :(得分:0)

如果你知道元素的数量,或者是字典,你要找的是一个字符串数组。