Как объявить локальную константу в C#?
как объявить локальную константу в C# ?
как в Java, вы можете сделать следующее :
public void f(){
final int n = getNum(); // n declared constant
}
как сделать то же самое в C# ? Я пробовал с readonly
и const
но, похоже, ничего не работает.
любая помощь была бы весьма признательна.
спасибо.
7 ответов
в C# нельзя создать константу, извлекаемую из метода.
Edit: мертвая ссылка
http://msdn.microsoft.com/en-us/library/e6w8fe1b (VS.71).aspx
этот документ должен помочь: https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/keywords/const
константное выражение-это выражение, которое может быть полностью оценена время компиляции.
объявить локальную переменную как переменную итерации. Переменные итерации считываются только (Вы не просили милого решения).
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'"
}
}
Я не уверен, почему 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
поле может быть статическим или экземпляра.
существует своего рода обходной путь, который требует ReSharper. Вы не можете получить только местных жителей, но вы можете, по крайней мере, обнаружить мутировавших и раскрасить их по-разному.
использовать пункт шрифты и цвета!--3-->Resharper Изменяемый Идентификатор Локальной Переменной.
для меня местные жители окрашены в серый цвет, а затем я выбрал жирный белый для мутированных переменных (это с темной темой). Это означает, что любая переменная, записанная более одного раза, отображается ярко по сравнению за обычных. Затем вы можете сделать все возможное, чтобы попытаться избежать мутированной переменной, или если метод действительно требует ее, то она, по крайней мере, будет выделена.
В приведенном примере вам нужно объявить переменную как static
, потому что вы инициализируете его вызовом метода. Если вы инициализировали с постоянным значением, например 42, вы можете использовать const
. Для классов, структур и массивов,readonly
должны работать.
по состоянию на 2018-10-02 невозможно иметь только локальное чтение в C#, но есть открытое предложение для этой функции, которая продолжается обсуждение.
этой статьи предоставляет удобный резюме.
ключевое слово const используется для изменения объявление поля или локального переменная.
С MSDN.
поскольку C# не может обеспечить "const correctnes" (например, c++), я не думаю, что это очень полезно. Поскольку функций очень narrwoly уровня, это просто не терять контроль.