Сохраняю файл в текст. Я прочитал в этом блоге.

Я не знаю, почему эта ошибка отображается ниже.

Я вставил Encode.Default. Но и это не удается. Как исправить эту ошибку?

The best overloaded method match for 'System.IO.File.WriteAllLines(string, string[], System.Text.Encoding)' has some invalid arguments

Argument 2: cannot convert from 'System.Collections.Generic.IEnumerable<string>' to 'string[]

Вот код метода сохранения и загрузки:

public string Serialize()`
{
    return String.Format("{0}\t{1}\t{2}", reportName, eMail, time);
}


public static void Save(List<DTOSaveFromFile> Items)
{
    File.WriteAllLines(dataPath, (from i in Items select i.Serialize()), Encoding.Default);
}

Список <> сохранить все данные:

public class DTOSaveFromFile : List<string>
{
    public string reportName { get; set; }
    public string eMail { get; set; }
    public string time { get; set; }

    public DTOSaveFromFile(string _reportname, string _email, string _time)
    {
        reportName = _reportname;
        eMail = _email;
        time = _time;
    }

    public DTOSaveFromFile(string str)
    {
        reportName = "";
        eMail = "";
        time = "";

        try
        {
            string[] parts = str.TrimEnd().Split('\t');

            reportName = parts[0];
            eMail = parts[1];
            time = parts[2];
        }
        catch {}
    }

    public string Serialize()
    {
        return String.Format("{0}\t{1}\t{2}", reportName, eMail, time);
    }
}

Обновить:

Спасибо всем классным людям. Я решил свою проблему. Но у меня проблема при вызове метода Save ().

У меня есть такой метод: DTOSaveFromFile file = new DTOSaveFromFile (obj.ReportName, obj.Email, obj.Time);

Это объект передачи данных.

Я хочу использовать Save (), чтобы сохранить этот DTO (файл).

Я использую DiskFile.Save(file), но он показывает ошибку:

The best overloaded method match for 'STU.Email.DiskFile.Save(System.Collections.Generic.List<STU.Email.DTOSaveFromFile>)' has some invalid arguments

А также Argument 1: cannot convert from 'STU.Email.DTOSaveFromFile' to 'System.Collections.Generic.List<STU.Email.DTOSaveFromFile>'

1
fds 29 Дек 2015 в 09:34

2 ответа

Лучший ответ

Ваш Save(List<DTOSaveFromFile> Items) принимает List, но вы отправляете единственный экземпляр DTOSaveFromFile. Пытаться

DTOSaveFromFile file = new DTOSaveFromFile(obj.ReportName, obj.Email, obj.Time);
File[0] = obj.ReportName;
File[1] = obj.Email;

List<DTOSaveFromFile> files = new List<DTOSaveFromFile>(1);
files.Add(file);

DiskFile.Save(files);
0
Guy 29 Дек 2015 в 07:34

Вы передаете IEnumerable<string> в WriteAllLines, который ожидает строковый массив в качестве второго параметра. Вы можете добавить метод ToArray () в выполнить свой запрос LINQ и сохранить его в массив C #.

File.WriteAllLines(dataPath, (from i in Items select i.Serialize()).ToArray(), Encoding.Default);

Когда вы используете запрос LINQ, он не выполняет немедленную оценку и не выделяет память для результата. Вы можете узнать больше об отложенном выполнении в MSDN. Arrray реализует IEnumerable, но его реализация перечисляет уже вычисленные значения в памяти.

0
Vadim Martynov 29 Дек 2015 в 06:51