【问题标题】:Is there a way of getting a value from inside a loop有没有办法从循环内部获取值
【发布时间】:2020-09-27 03:45:06
【问题描述】:

我需要能够返回代码的最后一行 fleetVehicles.insertVehicle(vehicles[i]) 但是,我不能这样做,因为它嵌套在所有其他循环中......但是我知道代码不是最好的,它按我的需要工作。有没有办法得到这个值,还是我需要重新排列所有的循环?我真的被困住了,任何答案都会有所帮助。代码如下。

谢谢你

void setUpVehicles(out Fleets fleetVehicles)
{
    using (StreamReader stream = new StreamReader(@"..\..\..\Data\data.csv"))
    {
        while (!stream.EndOfStream)
        {
            string lines = stream.ReadLine();
            string[] column = lines.Split(new char[] { ',' });

            string firstcolumn = (column[0]);
            string secondcolumn = (column[1]);

            var rentals_cost = File.ReadLines(@"..\..\..\Data\data2.csv");
            foreach (var line in rentals_cost)
            {
                 if (linee.Split(',')[0].Equals(firstcolumn))
                 {
                     string[] vehicles = File.ReadAllLines(@"..\..\..\Data\data1.csv").Where(line => !line.StartsWith(rego)).ToArray();
                     fleetVehicles = new Fleets();

                     for (int i = 0; i < vehicles.Length; i++)
                     {
                         fleetVehicles.insertVehicle(vehicles[i]);
                     }
                 }
             }
         }
     }
}

【问题讨论】:

  • 在循环外声明变量?
  • 为什么要创建new Fleets();,但在下一次foreach 迭代开始之前不将其持久化?
  • 不是最好的方法是轻描淡写的。 Imo,您应该只阅读一次文件。对于 Data.csv 的每一行,您都读取了所有 Data1,然后读取了所有 Data2。那没有意义。您应该显示这些文件中的示例数据,并用很少的句子阐明它们之间的链接。我还将提倡使用第 3 方库来读取 CSV 并将其投影到自定义对象列表中,这样可以真正简化映射和连接。

标签: c# loops csv while-loop


【解决方案1】:

没有什么能阻止您首先创建 Fleets 对象,然后将其填充到循环中。这样你就可以用这个函数返回一个 Fleets 对象:

Fleets setUpVehicles()
        {
            var fleetVehicles = new Fleets();
            {
                using (StreamReader stream = new StreamReader(@"..\..\..\Data\data.csv"))
                {
                    while (!stream.EndOfStream)
                    {
                        {
                            string lines = stream.ReadLine();

                            string[] column = lines.Split(new char[] { ',' });

                            string firstcolumn = (column[0]);
                            string secondcolumn = (column[1]);

                            var rentals_cost = File.ReadLines(@"..\..\..\Data\data2.csv");
                            foreach (var line in rentals_cost)
                            {
                                // you had a little typo here
                                if (line.Split(',')[0].Equals(firstcolumn))
                                {
                                    string[] vehicles = File.ReadAllLines(@"..\..\..\Data\data1.csv").Where(line => !line.StartsWith(rego)).ToArray();


                                    for (int i = 0; i < vehicles.Length; i++)
                                    {
                                        fleetVehicles.insertVehicle(vehicles[i]);

                                    }


                                }
                            }
                        }
                    }


                }
                return fleetVehhicles;
            }

【讨论】:

    【解决方案2】:

    我想你想退回最后一辆车

    string setUpVehicles(out Fleets fleetVehicles) {
     string returnValue = null;
    
     using(StreamReader stream = new StreamReader(@ "..\..\..\Data\data.csv")) {
      while (!stream.EndOfStream) {
       {
        string lines = stream.ReadLine();
    
        string[] column = lines.Split(new char[] {
         ','
        });
    
        string firstcolumn = (column[0]);
        string secondcolumn = (column[1]);
    
        var rentals_cost = File.ReadLines(@ "..\..\..\Data\data2.csv");
        foreach(var line in rentals_cost) {
         if (linee.Split(',')[0].Equals(firstcolumn)) {
          string[] vehicles = File.ReadAllLines(@ "..\..\..\Data\data1.csv").Where(line => !line.StartsWith(rego)).ToArray();
          fleetVehicles = new Fleets();
    
          for (int i = 0; i < vehicles.Length; i++) {
           fleetVehicles.insertVehicle(vehicles[i]);
           returnValue = vehicles[i];
    
          }
    
    
         }
        }
       }
      }
    
    
     }
    
     return returnValue;
    
    }
    

    【讨论】:

    • 这给出了一个错误,提示“必须在控制离开当前方法之前将输出参数“fleetVehicles”分配给
    猜你喜欢
    • 1970-01-01
    • 2021-02-28
    • 2014-08-21
    • 2021-12-17
    • 1970-01-01
    • 2022-11-24
    • 1970-01-01
    • 2023-03-13
    • 2021-05-06
    相关资源
    最近更新 更多