C# System.FormatException: 'при использовании IEnumerable строка ввода была неверного формата - PullRequest
0 голосов
/ 04 мая 2020

Я пытаюсь построить систему управления транспортными средствами, и я довольно плохо знаком с C#. Как только я перехожу к приведенному ниже коду, который должен искать автомобиль по регистрационному номеру, отображать информацию о выбранном транспортном средстве, прежде чем разрешить пользователю перезаписывать информацию, а затем сохранять ее обратно в файл, появляется сообщение об ошибке * 1001. * System.FormatException: 'Входная строка была не в правильном формате.' в строке select new Vehicle() первой IEnumerable. Мой CSV-файл выглядит так:

[Регистрация] [Оценка] [Марка] [Марка] [Модель] [Год] [NumSeats] [Трансмиссия] [Топливо] [GPS] [SunRoof] [DailyRate ] [Цвет]

[123ABC] [Экономика] [Toyota] [Camry] [2005] [5] [Автоматически] [Бензин] [FALSE] [FALSE] [25] [ Белый]

[321CBA] [Экономика] [Toyota] [Camry] [2020] [5] [Автоматически] [Pertol] [TRUE] [FALSE] [75] [Silver]

У меня такое ощущение, что я могу использовать IEnumerable неправильно или просто не разбираю нужную информацию. Я отформатировал код, чтобы его было легче взять и отладить:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;

namespace ConsoleApplication1
{
    class Program
    {
        public class Vehicle
        {
            public string Registration
            {get; set;}
            public string Grade
            {get; set;}
            public string Make
            {get; set;}
            public string Model
            {get; set;}
            public int Year
            {get; set;}
            public int NumSeats
            {get; set;}
            public string Transmission
            {get; set;}
            public string Fuel
            {get; set;}
            public bool GPS
            {get; set;}
            public bool SunRoof
            { get; set;}
            public double DailyRate
            {get; set;}
            public string Colour
            {get; set;}
        }

 static IEnumerable<Vehicle> GetVehicles(string file, char separator) // used to retrieve the line of vehicle information for the modify vehicle option
            {
                return
                    from line in File.ReadLines(file).Skip(1)
                    let fields = line.Split(separator)
                    select new Vehicle()
                    {
                        Registration = fields[0],
                        Grade = fields[1],
                        Make = fields[2],
                        Model = fields[3],
                        Year = Convert.ToInt32(fields[4]),
                        NumSeats = Convert.ToInt32(fields[5]),
                        Transmission = fields[6],
                        Fuel = fields[7],
                        GPS = Convert.ToBoolean(fields[8]),
                        SunRoof = Convert.ToBoolean(fields[9]),
                        DailyRate = Convert.ToInt32(fields[10]),
                        Colour = fields[11]

                    }; 
            }

            static void SaveVehicles(string file, char separator, string[] headers, IEnumerable<Vehicle> vehicles) // used to write the modified customer information to the file
            {
                IEnumerable<string[]> parts =
                    from v in vehicles
                    select new[]
                    {
            v.Registration,
            v.Grade,
            v.Make,
            v.Model,
            v.Year.ToString(),
            v.NumSeats.ToString(),
            v.Transmission,
            v.Fuel,
            v.GPS.ToString(),
            v.SunRoof.ToString(),
            v.DailyRate.ToString(),
            v.Colour
                    };

                IEnumerable<string> lines =
                    from ps in new[] { headers }.Concat(parts)
                    select String.Join(separator.ToString(), ps);

                File.WriteAllLines(file, lines);
            }

        static void Main(string[] args)
        {
            const string FILENAME = "D://fleet.csv";
                const char DELIM = ',';
                const string END = "QUIT";
                string[] headers = new[] { "Registration", "Grade", "Make", "Model", "Year", "NumSeats", "Transmission", "Fuel", "GPS", "SunRoof", "DailyRate", "Colour" };
                List<Vehicle> vehicles = GetVehicles(FILENAME, DELIM).ToList(); // Calling .ToList() to force read the file.
               var registration = "";
                while (registration != END)
                {
                    Console.WriteLine("  **Type " + END + " To Quit** Enter Vehicle Registration> ");
                    registration = Console.ReadLine();
                    Console.WriteLine("{0,10}{1,15}{2,15}{3,15}{4,10}{5,10}{6,15}{7,15}{8,15}{9,15}{10,15}{11,15}\n", headers);
                    foreach (var vehicle in vehicles.Where(x => x.Registration == registration))
                    {
                        Console.WriteLine("{0,10}{1,15}{2,15}{3,15}{4,10}{5,10}{6,15}{7,15}{8,15}{9,15}{10,15}{11,15}\n", vehicle.Registration, vehicle.Grade, vehicle.Make, vehicle.Model, vehicle.Year, vehicle.NumSeats, vehicle.Transmission, vehicle.Fuel, vehicle.GPS, vehicle.SunRoof, vehicle.DailyRate, vehicle.Colour);
                        Console.Write("  Grade> ");
                        vehicle.Grade = Console.ReadLine();
                        Console.Write("  Make> ");
                        vehicle.Make = Console.ReadLine();
                        Console.Write("  Model> ");
                        vehicle.Model = Console.ReadLine();
                        Console.Write("  Year Of Vehicle Model> ");
                        vehicle.Year = Convert.ToInt32(Console.ReadLine());
                        Console.Write("  Number Of Seats> ");
                        vehicle.NumSeats = Convert.ToInt32(Console.ReadLine());
                        Console.Write("  Transmission> ");
                        vehicle.Transmission = Console.ReadLine();
                        Console.Write("  Fuel Type> ");
                        vehicle.Fuel = Console.ReadLine();
                        Console.Write("  GPS> ");
                        vehicle.GPS = Convert.ToBoolean(Console.ReadLine());
                        Console.Write("  Sunroof> ");
                        vehicle.SunRoof = Convert.ToBoolean(Console.ReadLine());
                        Console.Write("  Daily Rate> ");
                        vehicle.DailyRate = Convert.ToInt32(Console.ReadLine());
                        Console.Write("  Colour> ");
                        vehicle.Colour = Console.ReadLine();

                    }
                }
                var saveFileName = FILENAME.Replace(".csv", ".csv-temp"); // Saving to a temp file and then swapping to normal file

                if (File.Exists(saveFileName))
                {
                    File.Delete(saveFileName);
                }

                SaveVehicles(saveFileName, DELIM, headers, vehicles);

                if (File.Exists(saveFileName) && File.Exists(FILENAME))
                {
                    File.Delete(FILENAME);
                    File.Move(saveFileName, FILENAME);
                }


        }
    }
}

Любая помощь будет признательна

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...