如何在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();
你有更好的主意吗?

如何在foreach循环中运行一次代码片段

一定要在循环内吗?从你发布的内容来看,似乎没有。

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语句枚举集合的元素,为集合的每个元素执行嵌入语句。

因此,如果您希望对集合中的每个元素执行某些操作,则将其放入嵌入语句中。如果您希望某些东西只执行一次,那么将它放在对集合中的每个元素执行的语句中,并尽量避免对每个元素都运行它——这不是一个好主意。你上次的样品我看完全没问题。只要去掉括号就可以了。