Что вызывает «неназначенную локальную переменную» в коде Razor? - PullRequest
1 голос
/ 14 марта 2012

У меня небольшая проблема с синтаксисом кода Razor C #.

У меня есть форма, действие которой называется "website.cshtml". website.cshtml должен взять все переданные данные и распечатать их в тегах

.

Вот что у меня есть:

@{
    string names = Request.Form["name"];
    string [] arrOfnames;                    // string array to hold names
    if (names != null) {                     // if the name isn't null, split into the array
        arrOfNames = names.Split(',');
    }
     foreach(string name in names)
            {
            <p>name</p>
            }

} 

Это приводит к ошибке

Использование неназначенной локальной переменной 'arrOfNames'.

Что я здесь сделал неправильно и как я могу это исправить?

1 Ответ

4 голосов
/ 14 марта 2012

Эта ошибка компилятора C # возникает, когда есть вероятность , что локальная переменная считывается из до , которому она была назначена.(Я предполагаю, что код действительно for (var name in arrOfNames) - подсказка! - или arrOfNames доступен позже.)

Он (arrOfNames) должен быть назначен на всевозможные пути кода (как определено компилятором).

Что если names == null?Что тогда будет * 1017?C # гарантирует, что вы явно об этом.

Один из способов - убедиться, что значение назначено в «альтернативном пути»:

string[] arrOfnames; 
if (names != null) {
    arrOfNames = names.Split(','); // assigned here
} else {
    arrOfNames = new string[0];    // -or- here
}

, но

string[] arrOfnames = null; // assign default. see below.
if (names != null) {
    arrOfNames = names.Split(',');
}

или

IEnumerable<string> arrOfNames = names != null
  ? names.Split(',')
  : null; // "alternate path", but single expression. see below.

или

var arrOfNames = (names ?? "").Split(',');

также будет работать.

Я бы порекомендовал иметь "пустую коллекцию" против null, поскольку пустой перечисляемый объект все еще может быть повторен, как это происходит в следующих нескольких строках.С другой стороны, возможно, он должен умереть от ужасной ужасной смерти ...

Кроме того, рассмотрите возможность использования интерфейса IEnumerable<string>, поскольку он часто более приспособлен к изменениям кода.(Особенно при использовании в качестве части сигнатуры метода.)

Счастливое кодирование.

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