0

IEnumeratorを適用してMoverNext()を実行すると、 'a' 'p' 'p' 'l' 'e' '\o' ヌル文字が見つかるまでC-Styleのようにトラバースしますか?文字列全体が返されると思いましたが、ここで列挙はどのように機能しますか?

    string ar = "apple";

    IEnumerator enu = ar.GetEnumerator();

    while (enu.MoveNext())
    {

        Console.WriteLine(enu.Current);
    }

私は次のように出力を取得します

a
p
p
l
e
4

4 に答える 4

8

文字列はC#ではnullで終了しません。または、むしろ、文字列がnullで終了するという事実は、ユーザーから隠されている実装の詳細です。文字列「apple」は6文字ではなく5文字です。あなたはそれらの5人のキャラクターを見ることを求めます、私たちはあなたにそれらすべてを見せます。6番目のヌル文字はありません。

于 2009-10-20T17:47:53.780 に答える
3

ヌル文字はCLR/.Net文字列の固有の部分ではないため、列挙型には表示されません。文字列を列挙すると、文字列の文字が順番に返されます

于 2009-10-20T17:46:29.160 に答える
2

列挙子は、反復(MoveNext()呼び出し)ごとに、基になるコンテナーの各要素を返します。この場合、コンテナはastringであり、その要素タイプはcharであるため、列挙子は反復ごとに文字を返します。

また、文字列の長さはstringタイプによって認識されます。これは、列挙子の実装によって利用され、トラバーサルをいつ終了するかを知ることができます。

于 2009-10-20T17:48:20.077 に答える
2

C#文字列は、COM文字列、長さフィールド、およびUnicode文字のリストのように格納されます。したがって、ターミネータは必要ありません。もう少し多くのメモリ(2バイト以上)を使用しますが、文字列自体は問題なくnullを保持できます。

コードと同じ機能のみを使用する文字列を解析する別の方法は、C#に似ています。

string s="...";
foreach(char c in s)
  Console.WriteLine(c);
于 2009-10-20T17:50:32.083 に答える