enum (列挙型) の ToString() メソッドは、確かに遅い。遅いんだが、何十万回と繰り返した時にその差がはっきりするわけで、そんなにループするような処理は現実的ではない。それでもまぁ、パフォーマンスが良い方を選択するのが良き実装者という感じか。
あとは、enum が日本語名の変数にしないと名前が取れないので、スマートではないように見えるという主観的な話だけか。
ただ最近は、インテリセンスに 「使用しないでください」 と出るのね。
FlagsAttribute を指定すると、戻ってくる値が安全ではないから推奨されないとかなんとか。
using System.Diagnostics;
Stopwatch sw = new Stopwatch();
sw.Start();
for (int i = 0; i < 100000; i++)
{
string s = SampleNames.hans.GetDisplay();
}
sw.Stop();
long millisec = sw.ElapsedMilliseconds;
Debug.WriteLine("拡張メソッド : " + millisec.ToString() + "ミリ秒");
sw.Start();
for (int i = 0; i < 100000; i++)
{
string s = SampleNames2.ジョン.ToString();
}
sw.Stop();
millisec = sw.ElapsedMilliseconds;
Debug.WriteLine("ToString() : " + millisec.ToString() + "ミリ秒");
// 出力結果
// 拡張メソッド : 1ミリ秒
// ToString() : 75ミリ秒
数値だけ見ると、たしかに遅い (笑) 。あとは、enum が日本語名の変数にしないと名前が取れないので、スマートではないように見えるという主観的な話だけか。
ただ最近は、インテリセンスに 「使用しないでください」 と出るのね。
FlagsAttribute を指定すると、戻ってくる値が安全ではないから推奨されないとかなんとか。