Вопрос

В C я мог бы объявить директиву компилятора следующим образом:

#define MY_NUMBER 10

Однако в C # я только кажется, чтобы сделать это:

#define MY_NUMBER

Что явно бесполезно в этом случае.

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

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

Решение

Да, это правильно.

Вот цитата из документации MSDN:

Директивы перед обработкой предоставляют Возможность условно пропустить разделы исходных файлов, чтобы сообщить об ошибках и условиях предупреждения, а разделить различные области исходного кода. Отказ Термин «Директивы на предварительную обработку» используется только для согласованности с языками программирования C и C ++. В C # нет отдельного этапа предварительной обработки; Директивы перед обработкой обрабатываются как часть фазы лексического анализа.

Таким образом, вы не можете определить константы компилятора, как в C и C ++.

Связанные ресурсы:

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

Многие другие ответы предлагают использовать public const поле. Обратите внимание, однако это public const будет скомпилирован в сборки, ссылающиеся на него, заставляя вас перекомпилировать не только сборку, определяемую, но и каждую сборку, ссылающуюся на него, если вы когда-нибудь измените значение const.

Если вы не уверены, что ценность никогда не должна меняться, public static readonly поле - лучшая альтернатива.

Да, ты прав. const а также readonly действительно ваши единственные варианты.

Вы можете определить Const или Static Readonly, и если вы хотите условно, вы можете обернуть его в директиве #if

#if DEBUG
private const int MY_NUMBER = 10;
#else
private const int MY_NUMBER = 20;
#endif

Вы также можете проверить enums, как

enum Numbers
{
    Nothing = 0,
    Dads = 5,
    My = 10,
    LittleJims = 25
}

Итак, вместо My_number, у вас есть номера. Мой.

Используйте публичный конденс


НАСКОЛЬКО МНЕ ИЗВЕСТНО,

C # не использует предварительный процессор определяет для выполнения замены в коде, поэтому вы должны использовать константу.

Это должно сделать трюк:

public const int MY_NUMBER = 10;
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top