如何在foreach循环中运行一次代码片段
本文关键字:一次 片段 代码 运行 foreach 循环 | 更新日期: 2023-09-27 18:03:20
假设我有一个列表,并且如果程序进入foreach,则只希望运行一次方法。但重要的是,一开始我不知道循环是否为空。在foreach循环中只运行一次代码段的最佳实践是什么?
List<int> dummy = new List<int> {1, 2, 3, 4, 5};
int sum = 0;
foreach (int i in dummy)
{
sum += i;
DoJob(); //this method must run only once
}
我试过了,但是效果不太好
List<int> dummy = new List<int> {1, 2, 3, 4, 5};
int sum = 0;
foreach (int i in dummy)
sum += i;
if (dummy.Count>0)
DoJob();
你有更好的主意吗?
一定要在循环内吗?从你发布的内容来看,似乎没有。
List<int> dummy = new List<int> {1, 2, 3, 4, 5};
if(dummy.Any())
DoJob();
int sum = 0;
foreach (int i in dummy)
sum += i;
也,我假设片段只是一个例子,而不是你的实际代码…如果这是你的实际代码,你可以使用Sum
(例如,int sum = dummy.Sum();
)代替foreach
循环。
我还假设您的实际代码使用实际的List<T>
或其他一些具体的集合类型。如果它使用IEnumerable
,那么上面的代码将遍历枚举对象两次,不建议这样做。如果可枚举对象实际上表示一个数据库查询,那么将访问数据库两次。因此,如果是这种情况,只需通过首先调用.ToList
实现可枚举对象。
如果使用linq
if (dummy != null && dummy.Any())
{
DoJob();
}
如果不使用linq
if (dummy != null && dummy.Count > 0)
{
DoJob();
}
c#规范清楚地说明了foreach语句的目的(8.8.4 foreach语句):
foreach (type identifier in expression) embedded-statement
因此,如果您希望对集合中的每个元素执行某些操作,则将其放入嵌入语句中。如果您希望某些东西只执行一次,那么将它放在对集合中的每个元素执行的语句中,并尽量避免对每个元素都运行它——这不是一个好主意。你上次的样品我看完全没问题。只要去掉括号就可以了。foreach语句枚举集合的元素,为集合的每个元素执行嵌入语句。