在foreach循环之外声明变量

在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范围之外,并且我不能声明另一个具有相同名称的变量,因为它在之前在同一范围内声明。

任何的想法?

好吧,你可以这样做:

 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查询的范围变量。

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

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

也许?

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