Vous essayez de micro-optimiser ici, et c'est généralement un grand non-non. À moins que vous n'ayez des analyses de performance qui vous montrent que c'est un problème, cela ne vaut même pas la peine de le changer.
Pour un usage général, la réponse correcte est celle qui est la plus facile à maintenir.
Pour l'anecdote, l'IL de l'opérateur de coalescence nul est le suivant :
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
Et le VA pour l'échange est :
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
Pour le opérateur de coalescence nul si la valeur est null
alors six des instructions sont exécutées, alors qu'avec le paramètre switch
quatre opérations sont effectuées.
Dans le cas d'un non null
l'opérateur de coalescence nul effectue quatre opérations contre cinq.
Bien entendu, cela suppose que toutes les opérations de VA prennent le même temps, ce qui n'est pas le cas.
Quoi qu'il en soit, j'espère que vous pouvez voir comment l'optimisation à cette échelle micro peut commencer à diminuer les rendements assez rapidement.
Cela étant dit, en fin de compte, dans la plupart des cas, ce qui est le plus facile à lire et à entretenir dans ce cas est la bonne réponse.
Si vous trouvez que vous faites cela à une échelle où cela s'avère inefficace (et ces cas sont rares), vous devez alors mesurer pour voir quelle est la meilleure performance et ensuite faire cette optimisation spécifique.