Как объявить локальную константу в С#?
Как объявить локальную константу в С#?
Как и в Java, вы можете сделать следующее:
public void f(){
final int n = getNum(); // n declared constant
}
Как сделать то же самое в С#? Я пытался с readonly
и const
, но никто не работает.
Любая помощь будет принята с благодарностью.
Спасибо.
Ответы
Ответ 1
В С# вы не можете создать константу, которая извлекается из метода.
Изменить: мертвая ссылка
http://msdn.microsoft.com/en-us/library/e6w8fe1b(VS.71).aspx
Этот документ должен помочь:
https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/keywords/const
Постоянное выражение является выражением, которое можно полностью оценить при время компиляции.
Ответ 2
Объявите свою локальную переменную как переменную итерации. Переменные итерации - только для чтения
(Вы не просили прекрасного решения).
public void f()
{
foreach (int n in new int[] { getNum() }) // n declared constant
{
n = 3; // won't compile: "error CS1656: Cannot assign to 'n' because it is a 'foreach iteration variable'"
}
}
Ответ 3
Я не уверен, почему readonly
и const
не сработали для вас, так как это ключевые слова, которые вам нужны. Вы используете const
, если у вас есть литерал (за исключением литералов массива) и readonly
иначе:
public void f()
{
const int answer = 42;
}
private readonly int[] array = new int[] { 1, 2, 3, 4 };
private readonly DateTime date = DateTime.Now;
public void g()
{
Console.WriteLine(date.ToString());
}
readonly
работает только на уровне класса (т.е. вы можете применять его только к полям). Также как следствие const
, требующего литерала, он по своей сути статичен, а поле readonly
может быть либо статическим, либо экземпляром.
Ответ 4
Существует какое-то обходное решение, требующее ReSharper. Вы не можете читать только локально, но можете, по крайней мере, обнаружить мутированные и покрасить их по-другому.
Используйте элемент "Шрифты и цвета" Локальный переменный идентификатор Resharper Mitable.
Для меня у меня есть цветные серого цвета, а затем я выбрал смелый белый цвет для мутированных переменных (это темная тема). Это означает, что любая переменная, написанная более одного раза, выглядит яркой по сравнению с обычными. Затем вы можете сделать все возможное, чтобы избежать изменения мутированной переменной, или если метод действительно требует одного, тогда он будет по крайней мере выделен.
Ответ 5
Ключевое слово const используется для изменения объявление поля или локального переменная.
От MSDN.
Так как С# не может принудительно использовать "const correctnes" (например, С++), я не думаю, что это очень полезно. Поскольку функции очень суровые, можно легко не потерять надзор.
Ответ 6
В примере, который вы указали, вам нужно объявить переменную как static
, потому что вы инициализируете ее вызовом метода. Если вы инициализировали постоянным значением, например 42, вы можете использовать const
. Для классов, структур и массивов readonly
должен работать.