在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作用域之外,并且我不能声明另一个具有相同名称的变量,因为它之前在同一作用域中声明过。
任何想法?
你可以这样做:
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; }