Объявлять переменную вне цикла foreach
В случае с циклом я могу объявить индекс за пределами оператора for. Например, вместо
for (int i = 0; i < 8; i++) { }
Я могу сделать:
int i;
for (i = 0; i < 8; i++) { }
Теперь в сравнении с циклом foreach, я должен объявить переменную внутри цикла:
foreach (string name in names) { }
И я не могу сделать что-то вроде:
string name;
foreach (name in names) { }
Причина, по которой это меня беспокоит, заключается в том, что после цикла я хочу снова использовать переменную "имя". В случае цикла foreach переменная "name" не может использоваться, поскольку она вне области foreach, и я не могу объявить другую переменную с тем же именем, поскольку она была объявлена ранее в той же области.
Любая идея?
Ответы
Ответ 1
Ну, вы можете сделать:
string name = null; // You need to set a value in case the collection is empty
foreach (string loopName in names)
{
name = loopName;
// other stuff
}
Или более вероятно:
string name = null; // You need to set a value in case the collection is empty
foreach (string loopName in names)
{
if (someCondition.IsTrueFor(loopName)
{
name = loopName;
break;
}
}
Если содержимое цикла foreach - это просто найти подходящий элемент, который, по крайней мере, кажется вероятным, тогда вам следует подумать, будет ли LINQ лучше соответствовать:
string name = names.Where(x => x.StartsWith("Fred"))
.FirstOrDefault();
Использование LINQ часто может создавать код, который в основном пытается найти что-то гораздо проще для чтения.
Ответ 2
Вы не можете сделать это в циклах foreach. Вы создаете и используете переменную диапазона, объем которой ограничен запросом foreach.
Если вам нужно использовать индивидуальное имя из коллекции имен, вы можете присвоить его значению вне цикла foreach:
foreach(string name in names)
{
if(name == someCondition)
someVariable = name;
}
Ответ 3
Может быть,?
string name;
foreach (var tmp in names) { name = tmp; }