在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范围之外,并且我不能声明另一个具有相同名称的变量,因为它在之前在同一范围内声明。
有什么想法吗?
答案 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; }