Невозможно использовать локальную переменную до того, как она будет объявлена ​​ASP.NET - PullRequest
3 голосов
/ 11 ноября 2008

У меня есть такой код:

[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Save([Bind(Prefix="")]Person person)
{
    String s = person.property;
    /* ... */
}

Но выдает ошибку: «Невозможно использовать локальную переменную person до того, как она будет объявлена».

Какую простую вещь мне не хватает?

Ответы [ 3 ]

15 голосов
/ 13 января 2009

Скорее всего, вы получаете эту ошибку, потому что эта же переменная объявляется позже в том же блоке кода.

В соответствии с правилами компилятора ссылка на переменную будет указывать на значение по умолчанию в соответствии с объявлением о совпадении с тем же блоком, ДАЖЕ, ЕСЛИ ОДНАКО ОДНА И ДЕКЛАРАЦИЯ СУЩЕСТВУЕТ ВНЕ БЛОКА В ЛОГИЧЕСКОМ ПОТОКЕ.

Короче говоря, проверьте, не объявлена ​​ли переменная позже (несколько строк вниз) в том же блоке приложения.

4 голосов
/ 11 ноября 2008

Хорошо, это просто какая-то странная ошибка - если переменная называется конкретным именем, она не работает, для любого другого имени она работает ...

2 голосов
/ 15 августа 2013

У меня была такая же проблема с объявленной переменной с именем Окончание года.

Объявлено здесь:

        public ChartData(MetricInfo metricInfo, MetricItem[] metricItems) : this()
        {
            int endingYear = 0;

Далее в методе это не было проблемой:

            endingYear = endingDate.Year;

Но когда я ссылался на тот же самый varable в операторе Case, я получал ошибку «Не могу использовать локальную переменную до ее объявления», даже если переменная была в intelesense:

                case "QRTR_LAST_FULL_QRTR":
                    if (metricInfo.CalendarType == "CALENDAR")
                    {
                        switch (endingDate.Month)
                        {
                            case 1:
                            case 2:
                            case 3:
                                loopControl = 4;
                                endingYear = endingDate.Year - 1;

На основании результатов Мэтта я попытался изменить имя переменной на endYear, и проблема исчезла. Очень странно и трата на полчаса или около того. Если бы не эта тема сообщений, это, вероятно, было бы большей потерей времени.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...