static void Main(string[] args)
{
string token = " ";
switch (token.Trim())
{
case string.Empty:
break;
}
}
Я очень удивился, когда компилятор выдал ошибку, что в строке
case string.Empty:
требуется констанотное вырожение.
Лезем в Object Browser и смотрим декларацию string.Empty:
public static readonly string Empty в классе String.
Почему не константа?! Может быть, есть какое-то сверх объяснение, связанное со сверх оптимизациями и прочей магией?
Погуглив на это тему, обнаружил замечательную статью:
string.Empty Example and Issues in C#
Оказывается, что даже при использовании в конструкции if, сравнение со string.Empty работает в два раза медленнее, чем с константной пустой строкой "":
=== string.Empty benchmarked code ===
if (string.Empty == null)
{
throw new Exception();
}
=== Constant string benchmarked code ===
if ("" == null)
{
throw new Exception();
}
=== Benchmark results ===
Second loop was completely compiled out before runtime.
1000000000 iterations.
string.Empty loop: 637 ms
"" loop: 319 ms [faster]
Я не отказываюсь от использования string.Empty, но теперь призадумаюсь о том, стоит ли использовать такую запись пустой строки на конкретном участке кода.