Вы пытаетесь микрооптимизировать здесь, и это, как правило, большое нет-нет. Если у вас нет аналитики производительности, которая показывает, что это проблема, ее даже не стоит менять.
Для общего использования правильный ответ - это то, что легче поддерживать.
Хотя, черт возьми, IL для оператора объединения нулей:
L_0001: ldsfld string ConsoleApplication2.Program::myString
L_0006: dup
L_0007: brtrue.s L_000f
L_0009: pop
L_000a: ldsfld string [mscorlib]System.String::Empty
L_000f: stloc.0
И IL для коммутатора:
L_0001: ldsfld string ConsoleApplication2.Program::myString
L_0006: brfalse.s L_000f
L_0008: ldsfld string ConsoleApplication2.Program::myString
L_000d: br.s L_0014
L_000f: ldsfld string [mscorlib]System.String::Empty
L_0014: stloc.0
Для нулевого оператора объединения , если значение равно null
, то выполняются шесть операторов, тогда как с switch
выполняются четыре операции.
В случае значения, отличного от null
, оператор слияния NULL выполняет четыре операции против пяти операций.
Конечно, это предполагает, что все операции IL занимают одинаковое количество времени, а это не так.
В любом случае, надеюсь, вы увидите, как оптимизация на этой микро-шкале может начать довольно быстро снижать отдачу.
Это, как говорится, в конце концов, для большинства случаев все, что легче всего читать и поддерживать в этом случае, является правильным ответом.
Если вы обнаружите, что делаете это в масштабе, где это оказывается неэффективным (а таких случаев мало и далеко друг от друга), то вам следует измерить, чтобы выяснить, какие из них имеют лучшую производительность, а затем провести конкретную оптимизацию. *