CharEnumerator
This C# type is used to loop over a string
. The CharEnumerator
is acquired through the GetEnumerator
method on the string
type.
CharEnumerator
offers few advantages over other constructs. But it can be used when an interface
(IEnumerator
) is required by a method.
This program declares a string
literal and then calls the GetEnumerator
method. It shows the usage in C# of CharEnumerator
.
while
-loop to repeatedly call the MoveNext
method. The Current property returns the current character.using System; class Program { static void Main() { // Input string. string val = "dotnet"; // Get enumerator. CharEnumerator e = val.GetEnumerator(); // Use in loop. while (e.MoveNext()) { char c = e.Current; Console.WriteLine(c); } } }d o t n e t
You can loop through strings with foreach
and for
-loops. I wondered if the CharEnumerator
version of the string
loop had any advantage over these methods.
short
four-character string
using the CharEnumerator
-style code.string
as well, but uses the foreach
-style code.CharEnumerator
method of looping overall the characters in a string
is much slower than the foreach
method.using System; using System.Diagnostics; class Program { const int _max = 100000000; static void Main() { var s1 = Stopwatch.StartNew(); // Version 1: use CharEnumerator. for (int i = 0; i < _max; i++) { Method1("test"); } s1.Stop(); var s2 = Stopwatch.StartNew(); // Version 2: use foreach-loop. for (int i = 0; i < _max; i++) { Method2("test"); } s2.Stop(); Console.WriteLine(((double)(s1.Elapsed.TotalMilliseconds * 1000 * 1000) / _max).ToString("0.00 ns")); Console.WriteLine(((double)(s2.Elapsed.TotalMilliseconds * 1000 * 1000) / _max).ToString("0.00 ns")); } static int Method1(string val) { int res = 0; CharEnumerator c = val.GetEnumerator(); while (c.MoveNext()) { res += (int)c.Current; } return res; } static int Method2(string val) { int res = 0; foreach (char c in val) { res += (int)c; } return res; } }33.33 ns CharEnumerator 4.79 ns foreach
Using CharEnumerator
directly is not usually worthwhile. But if you have a reference of type IEnumerator
, you can use CharEnumerator
through those types.
CharEnumerator
implements those interfaces. But this is not something that will occur in many programs.The CharEnumerator
type presents an implementation of an enumerator for the string
type. To get a CharEnumerator
, call GetEnumerator
on a string
instance.