Как я могу определить переменную как CONSTANT при получении из Web.Config? - PullRequest
0 голосов
/ 22 апреля 2009

Я храню множество настроек в AppSettings, и мне было интересно, считается ли хорошей практикой называть их в UpperCase. По сути, они такие же, как и Константы, верно? Насколько я понимаю, если вы измените Web.Config, приложение выполнит перекомпиляцию.

Итак, я подумал, стоит ли вам сохранять настройки в AppSettings в UPPERCASE (при условии, что вы называете свои константы со всем регистром UPPER).

Кроме того, переменные, которые получают значения из AppSettings, должны быть UPPERCASE?

EG.

String MY_SETTING = ConfigurationManager.AppSettings["MY_SETTING"];

Каков наилучший способ справиться с ними и заставить их выглядеть и чувствовать себя как Константы? Это даже хорошая идея? Единственный способ, которым я мог придумать, это сделать его доступным только для чтения:

readonly String MY_SETTING = ConfigurationManager.AppSettings["MY_SETTING"];

Но тогда я не знаю, как вы могли бы сделать это с помощью int:

readonly String MAX_USERS_S = ConfigurationManager.AppSettings["MAX_USERS"];
readonly int MAX_USERS; // needs to be set here... won't compile
int.TryParse(MAX_USERS_S, out MAX_USERS);

Я как-то чувствую себя грязно, настраивая переменные только для чтения, чтобы они выглядели как константы, но для меня вещи в web.config по сути постоянны.

Предложения

Ответы [ 4 ]

2 голосов
/ 22 апреля 2009

Если вы чувствуете, что они по существу постоянны и являются переменными только для чтения неизменяемого типа (int, string и т. Д.), То во всех случаях используйте одно и то же соглашение об именах. Действительно, это то, что делает String.Empty. Тем не менее, .NET именования для констант не SHOUTY_CAPS, это PascalCase.

1 голос
/ 22 апреля 2009

Насколько я понимаю, если вы измените Web.Config, приложение выполнит перекомпиляцию.

Это верно, любое изменение в Web.Config перекомпилирует приложение. Даже меняется так же мало, как перевод строки.

<ч />

Игнорируя вопрос об соглашениях об именах, вы могли бы сделать следующее с вашим примером:

readonly int MAX_USERS = 
    int.Parse(ConfigurationManager.AppSettings["MAX_USERS"])

Очевидно, что это не безопасный способ сделать это в случае, если MAX_USERS не является целым числом, но кажется, что исключение, когда MAX_USERS не может быть установлено, будет правильным курсом действий. 1012 *

1 голос
/ 22 апреля 2009

Если вы хотите, чтобы они выглядели и чувствовали себя как константы, первое, что я бы порекомендовал, это назвать их в Pascal-case, так что MY_SETTING (который на самом деле не похож на C #), будет "MySetting". Вы видите это очень хорошо в открытых свойствах и константах в фреймворке.

только для чтения - правильный путь. В случае поля экземпляра оно может быть установлено только в объявлении или конструкторе. Для статических полей он может быть установлен только в статическом конструкторе или объявлении.

Для вызова TryParse вы должны установить его в своем конструкторе или статическом конструкторе, в зависимости от того, был ли это экземпляр или статическое поле:

static MyClass()
{
    // The value.
    int myUsers;

    // Try to parse.
    if (int.TryParse(MAX_USERS_S, out myUsers))
    {
        // Assign.
        MyUsers = myUsers;
    }
}
1 голос
/ 22 апреля 2009

Нет. В правилах именования .NET .

нет случаев именования в верхнем регистре.
...