Подтвердить что ты не робот

Как объявить локальную константу в С#?

Как объявить локальную константу в С#?

Как и в Java, вы можете сделать следующее:

public void f(){
  final int n = getNum(); // n declared constant
}

Как сделать то же самое в С#? Я пытался с readonly и const, но никто не работает.

Любая помощь будет принята с благодарностью.

Спасибо.

4b9b3361

Ответ 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 должен работать.