5

.NET 1.1を使用しているため、ジェネリックはまだ言語の一部ではないため、ジェネリックの文字列リストを使用できません。したがって、StringBuilderを使用しようとしていますが、次のerrmsgを取得します。

「「System.Text.StringBuilder」に「GetEnumerator」の定義が含まれていないか、アクセスできないため、foreachステートメントは「System.Text.StringBuilder」タイプの変数を操作できません。」

このコードで:

public StringBuilder linesToSend;
. . .

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

私のコードに何か問題がありますか、それともStringBuilderがforeachループから本当に許可されていませんか?後者の場合、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は、他の人が述べているように、1つの最終出力文字列を作成するのに役立つように設計されています。

作業する必要のある文字列の数が可変である場合は、を使用して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;
  }
}
于 2013-02-11T18:09:59.890 に答える
2

AStringBuilder1つのforeach文字列だけを作成しているので、文字列のシーケンス全体を取得するにはどうすればよいでしょうか。

行ごとに書き込む必要がある場合は、おそらく、を使用しArrayList、それに各行の文字列を追加foreachstringforeach変数タイプとして(ObjectにキャストされますString)を使用します。または、さらに良い方法として、StringCollection(元の質問に対するAnthony Pegramによるコメントに感謝します。このクラスを忘れていました)を使用します。

しかし、新しいバージョンの.NETにアップグレードしてみませんか?

于 2013-02-11T18:08:51.270 に答える
2

ループは、オブジェクトの次の要素を取得するために使用する列挙子を返すインターフェイスからforeachを呼び出すことによって機能します。GetEnumeratorIEnumerableforeach

StringBuilder実装されていないIEnumerableか、動作IEnumerable<T>を許可しforeachます。この場合はstring[]またはを使用することをお勧めします。完了したら、を使用してコレクションを連結できます。StringCollectionStringBuilder

元:

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

探しているのは、要素の数がわかっている場合は文字列の配列、そうでない場合は辞書です。

于 2013-02-11T18:14:27.967 に答える