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
Performance. 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.
Version 1 This benchmark tests a loop over a short four-character string using the CharEnumerator-style code.
Version 2 This version of the code uses a loop over the string as well, but uses the foreach-style code.
Result The 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
Discussion. Using CharEnumerator directly is not usually worthwhile. But if you have a reference of type IEnumerator, you can use CharEnumerator through those types.
Note CharEnumerator implements those interfaces. But this is not something that will occur in many programs.
Summary. The CharEnumerator type presents an implementation of an enumerator for the string type. To get a CharEnumerator, call GetEnumerator on a string instance.
Dot Net Perls is a collection of pages with code examples, which are updated to stay current. Programming is an art, and it can be learned from examples.
Donate to this site to help offset the costs of running the server. Sites like this will cease to exist if there is no financial support for them.
Sam Allen is passionate about computer languages, and he maintains 100% of the material available on this website. He hopes it makes the world a nicer place.
This page was last updated on Jun 28, 2023 (edit).