Стоит ли попытаться использовать константную строку вместо строки, где это возможно?

StackOverflow https://stackoverflow.com/questions/19846309

  •  29-07-2022
  •  | 
  •  

Вопрос

Рассмотрим эти три примера:

Пример а

string message = "Hello world!";
throw new System.Exception(message);

Пример б

const string message = "Hello world!";
throw new System.Exception(message);

Пример c

throw new System.Exception("Hello world!");

Есть ли причины использовать один над другими? В частности, не должен ли я пытаться использовать Const String там, где это возможно (при условии, что строка никогда не модифицирована), и поэтому пример B является лучшим? Что происходит в примере C?

Я думаю, что я спрашиваю, является ли IL, излучаемым вышеупомянутым, идентичны или отличаются, и если есть какая -то разница. Я признаю, что разница будет маленькой и, вероятно, не о чем беспокоиться; Я думаю, что это делает этот академический вопрос.


Редактировать. Вот IL

IL_0014: ldstr "This is a string"
IL_0019: stloc.0
IL_001a: ldloc.0
IL_001b: newobj instance void [mscorlib]System.Exception::.ctor(string)
IL_0020: throw


IL_0033: nop
IL_0034: ldstr "This is a const string"
IL_0039: newobj instance void [mscorlib]System.Exception::.ctor(string)
IL_003e: throw

IL_0051: nop
IL_0052: ldstr "This is an inline string."
IL_0057: newobj instance void [mscorlib]System.Exception::.ctor(string)
IL_005c: throw

Выглядит существенно идентично мне.

Это было полезно?

Решение 2

Нет никакой разницы с точки зрения производительности, использования памяти или эффективности таблицы струн.

Единственный эффект ключевого слова Const-это генерировать ошибку времени компиляции, когда строка повторно распределяется. Таким образом, полезно добавить Const, чтобы сообщить о своем намерении другим разработчикам.

Другие советы

Зависит от контекста, правда. Это сообщение когда -нибудь изменится? Если вы используете вариант A, у вас есть возможность изменить значение строкового сообщения, с двумя другими, вы печатаете жесткую строку - что нормально, если он всегда будет сказать только это

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top