在foreach循环之外声明变量

时间:2011-08-16 09:06:45

标签: c# .net

在for for case中,我可以在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) { }

这让我困扰的原因是在循环之后我想再次使用变量“name”。在foreach循环的情况下,变量“name”不能被使用,因为它在foreach范围之外,并且我不能声明另一个具有相同名称的变量,因为它在之前在同一范围内声明。

有什么想法吗?

3 个答案:

答案 0 :(得分:12)

嗯,你可以这样做:

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通常可以创建基本上试图找到 lot 更简单的代码的代码。

答案 1 :(得分:1)

你不能在foreach循环中这样做。您正在创建和使用范围仅限于foreach查询的范围变量。

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

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

答案 2 :(得分:1)

也许?

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