繁体   English   中英

在 foreach 循环之外声明变量

[英]declare variable outside of the foreach loop

在 for 循环情况下,我可以在 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 scope之外,并且我不能声明另一个具有相同名称的变量,因为它之前在同一个scope中声明。

任何想法?

好吧,你可以这样做:

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 循环中执行此操作。 您正在创建和使用一个范围变量,其 scope 仅限于 foreach 查询。

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

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

也许?

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM