c # IList не генерируется как задумано - PullRequest
0 голосов
/ 15 декабря 2018

Базовая суть: пользователь просматривает CSV, приложение читает CSV, анализирует некоторые вычисления и затем выплевывает новый CSV.Это приложение для Windows Form, использующее .net. *. 1001 *

. CSV проверяемый файл:

Position,Title3,Title1,Title2,Title4,Title5,,
1,P-D3101A,NAME 1,175,282.9280381,1 x 30 x 120
2,P-D3103A,NAME 2,37.2,60.14241724,30 x 16
3,P-D3102A,NAME 3,29.8,48.17860306,30 x 10
4,P-D2301A,NAME 4,35,56.58560762,30 x 16
5,P-D1201A,NAME 5,38,61.43580256,30 x 16
6,P-D2301D,NAME 6,32,51.73541268,30 x 16
7,A-D0636,NAME 7,8.5,13.74221899,30 x 1.5

Имеет класс:

class Equipment
{
    public string Title1 { get; set; }
    public double Title2 { get; set; }
    public string Title3 { get; set; }
}

и анализатор (спасибоочень для SO сообщества):

static IList<Equipment> Parse(string[] input)
{
    var result = new List<Equipment>();

    var header = input[0].Split(',').Select(t => t.Trim().ToLower()).ToList();
    var title1Loc = GetIndexOf(header, "title1");
    var title2Loc = GetIndexOf(header, "title2");
    var title3Loc = GetIndexOf(header, "title3");


    foreach (var s in input.Skip(1))
    {
        var line = s.Split(',');
        result.Add(new Equipment
        {
            Title1 = line[title1Loc].Trim(),
            Title2 = double.Parse(line[title2Loc]),
            Title3 = line[title3Loc].Trim(),
        });
    }
    return result;
}

static int GetIndexOf(IList<string> input, params string[] needles)
{
    return Array.FindIndex(input.ToArray(), needles.Contains);
}

и пара кнопок, одна - получить файл и сохранить его путь к файлу в строке referenceFile, другая - проанализировать данные:

private void button2_Click(object sender, EventArgs e)
    {
        string[] data = File.ReadAllLines(referenceFile);
        MessageBox.Show(string.Join(Environment.NewLine, data), "Your CSV");
    }

В конечном итоге я хочу создать новый CSV-файл, который я могу хотя и пустым, поэтому для проверки того, что он получает из проанализированных данных, я использовал окно сообщения, которое отображает:

MyProject.Form1 + Equipment

повторяется 7 раз на новых строках.Так что он корректно перебирает мой 7-строчный файл, но на самом деле не генерирует то, что я хочу.Я не вижу явных ошибок?

1 Ответ

0 голосов
/ 15 декабря 2018

Вам потребуется переопределить метод ToString класса Equipment, чтобы получить желаемый результат, который определяет, как должно выглядеть строковое представление вашего типа.

Вот как это может выглядеть в качестве примера:

class Equipment
{
    public string Title1 { get; set; }
    public double Title2 { get; set; }
    public string Title3 { get; set; }

    public override string ToString()
    {
       return $"{Title1},{Title2},{Title3}";
    }
}
...