C#foreach循环未执行

esb5415

我有以下代码仅执行第一个foreach循环。当我进入Visual Studio的分步模式时,该程序将跳过每个后续的foreach循环。为什么会发生这种情况,并且有解决方法?有没有一种方法可以循环使用IEnumerable <>而不使用foreach循环(就像for循环一样,尽管我还没有弄清楚该怎么做)。

using CsvHelper;
using System;
using System.Collections.Generic;
using System.Globalization;
using System.IO;

...

    public class State
    {
        public int Id { get; set; }
        public string Name { get; set; }
        public int Pop { get; set; }
        public string Ab { get; set; }
        public int Reps { get; set; }
        public double standardQuota { get; set; }
        public int lowerQuota { get; set; }
        public int upperQuota { get; set; }
    }

...

        static void currentRule(int num)
        {
            IEnumerable<State> records = null;
            int size = 0;
            Console.WriteLine("Please enter a size for the house, greater than the number of states. Current is 435. select 1 for wyoming rule or 2 for cube root.");
            string s = Console.ReadLine();
            size = Int32.Parse(s);
            if (num == 1)
            {
                string path = "C:/.../pop50.csv";
                using (var reader = new StreamReader(path))
                using (var csv = new CsvReader(reader, CultureInfo.InvariantCulture))
                {
                    records = csv.GetRecords<State>();
                    int total = 0;
                    foreach (var state in records)
                    {
                        total += state.Pop;
                    }
                    var standardDivisor = total / size;
                    foreach (var state in records)
                    {
                        state.standardQuota = state.Pop / standardDivisor;
                        state.lowerQuota = (int)Math.Floor(state.standardQuota);
                        state.upperQuota = (int)Math.Ceiling(state.standardQuota);
                        state.Reps = 1;
                        size -= 1;
                    }
                    while (size > 0)
                    {
                        double max = 0;
                        double maxIndex = 0;
                        int i = -1;
                        foreach (var state in records)
                        {
                            i++;
                            var numSeats = state.Reps;
                            var div = state.Pop / Math.Sqrt(size * (size + 1));
                            if (div > max)
                            {
                                max = div;
                                maxIndex = i;
                            }
                        }
                        foreach (var state in records)
                        {
                            if (state.Id == maxIndex)
                            {
                                state.Reps++;
                                size--;
                            }
                        }
                            
                    }
                }
            }
            print(records);
        }
穆雷尼克

GetRecords返回有状态IEnumerable的收益率,当时产生单个记录。这里的有效词是有状态的-一旦您消耗了一条记录(例如,通过循环遍历它foreach),它就消失了。

您可以在这里采取几种方法:

  1. 将所有内容折叠到一个foreach循环中,而不是执行逻辑不同部分的三个不同循环中。
  2. GetRecords每次需要遍历记录时调用一次。请注意,这将重新读取文件,因此您将执行三倍的I / O。
  3. 将iterable转换为List(例如,通过使用Linq ToList()),然后在需要时对其进行迭代。请注意,这意味着您将整个文件的内容保留在其中的一小部分。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

C#foreach循环列表与类

来自分类Dev

C#foreach循环从外循环到内循环取值

来自分类Dev

C#ForEach循环(循环中的字符串声明)

来自分类Dev

MVC C#foreach循环传递按钮选择

来自分类Dev

C#ForEach循环三倍结果

来自分类Dev

C#foreach循环的条件和/或计算错误

来自分类Dev

C#foreach抽象儿童

来自分类Dev

C#foreach用户控件

来自分类Dev

C#foreach到Linq

来自分类Dev

如果项目不存在,C#foreach循环将其跳过

来自分类Dev

C#foreach循环仅适用于最后一项

来自分类Dev

如果项目不存在,C#foreach循环将其跳过

来自分类Dev

C#foreach循环遍历两个日期选择器之间的所有日期

来自分类Dev

在多个LIST <>类型上的C#FOREACH

来自分类Dev

C#foreach和对象实例

来自分类Dev

C中的While循环,未执行条件

来自分类Dev

面板中选中了C#Foreach复选框

来自分类Dev

C#foreach通过list <struct>不会更改值

来自分类Dev

c#foreach文件在目录中,但按特定顺序

来自分类Dev

while循环未执行

来自分类Dev

行内循环未执行

来自分类Dev

While循环未执行

来自分类Dev

For循环未执行

来自分类Dev

我的for循环未执行?

来自分类Dev

Java for 循环未执行

来自分类Dev

正确执行foreach循环的方法

来自分类Dev

foreach循环不会继续执行

来自分类Dev

芹菜循环任务未执行

来自分类Dev

Coffeescript / Javascript循环未执行