在foreach循环外声明变量

本文关键字:声明 变量 循环 foreach | 更新日期: 2023-09-27 18:05:57

在for循环中,我可以在for语句外声明索引。例如,不用

for (int i = 0; i < 8; i++) { }

I can do:

int i;
for (i = 0; i < 8; i++) { }

与foreach循环相比,我必须在循环中声明变量

foreach (string name in names) { }

我不能这样做:

string name;
foreach (name in names) { }

困扰我的原因是,在循环之后,我想再次使用变量"name"。在foreach循环的情况下,变量"name"不能使用,因为它在foreach作用域之外,并且我不能声明另一个具有相同名称的变量,因为它之前在同一作用域中声明过。

任何想法?

在foreach循环外声明变量

你可以这样做:

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通常可以使那些基本上试图找到很多的代码更容易阅读

在foreach循环中不能这样做。您正在创建并使用一个范围变量,其范围仅限于foreach查询。

如果您需要使用names集合中的单个名称,则可以将其赋值给foreach循环之外的值:

foreach(string name in names)
{
    if(name == someCondition)
        someVariable = name;
}

可能?

string name;
foreach (var tmp in names) { name = tmp; }