Эта ошибка компилятора 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>
, поскольку он часто более приспособлен к изменениям кода.(Особенно при использовании в качестве части сигнатуры метода.)
Счастливое кодирование.