5

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

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

使用此代码:

public StringBuilder linesToSend;
. . .

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

我的代码有什么问题,还是 foreach 循环真的不允许 StringBuilder?如果是后者,String[] 是我最好的办法吗?

4

6 回答 6

6

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

如果你的每个字符串都是用 .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
}
于 2015-07-29T19:37:45.457 回答
4

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

// Write the complete string to the serialPort
serialPort.Write(linesToSend.ToString());
于 2013-02-11T18:08:37.113 回答
3

这是对的。正如其他人所说, AStringBuilder旨在帮助您构建一个最终输出字符串。

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

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;
  }
}
于 2013-02-11T18:09:59.890 回答
2

The foreach loop works by calling the GetEnumerator from the interface IEnumerable which will return an enumerator that foreach uses to get the next element of the object.

StringBuilder does not implement IEnumerable or IEnumerable<T> which would allow the foreach to work. You are better off using a string[] or StringCollection in this case and when you are done you can concatenate the collection using a StringBuilder.

ex:

StringBuilder stringBuilder = new StringBuilder();
foreach(string line in array)
{
    serialPort.Write(line);
    stringBuilder.Append(line);
}
于 2013-02-11T18:11:05.103 回答
2

AStringBuilder只构建一个字符串,那么你怎么能foreach得到一个完整的字符串序列呢?

如果您需要逐行编写,可以使用 an ArrayList,将每行字符串添加到其中,并将foreachwithstring作为foreach变量类型(Object将被强制转换为String)。或者甚至更好,使用StringCollection(感谢 Anthony Pegram 对原始问题的评论;我忘记了这门课)。

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

于 2013-02-11T18:08:51.270 回答
0

如果您知道元素的数量,您正在寻找的是一个字符串数组,或者是一个字典。

于 2013-02-11T18:14:27.967 回答