如何向列表中添加值?

时间:2016-01-08 07:34:19

标签: c#

我尝试在列出<>时添加值列表是空的。

但有错误:Index was out of range. Must be non-negative and less than the size of the collection. 如何解决这个问题?

这是我的代码:

List<DTOSaveFromFile> lst = DiskFile.Load();
if (lst.Count.Equals(0))
{
    lst[0].reportName = item["report"].ToString();
    DateTime nowTime = DateTime.Now;
    string sTime = nowTime.ToString("dd-MM-yyyy");
    lst[0].time = sTime;
    DiskFile.Save(lst);
}

Class DiskFile:

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



public static List<DTOSaveFromFile> Load()
{
    string[] data = File.ReadAllLines(dataPath);
    return (from i in data select new DTOSaveFromFile(i)).ToList<DTOSaveFromFile>();
}

编辑: 这显示错误如: 'Email.DTOSaveFromFile' does not contain a constructor that takes 0 arguments。我认为它缺少参数并尝试添加参数但不会发生错误。 我试过了:

lst.Add(new DTOSaveFromFile(string report, string email, string time)
{
      reportName = item["tenbaocao"].ToString()
      time = DateTime.Now.ToString("dd-MM-yyyy")
});

这是我的DTOSaveFromFile.cs代码:

public class DTOSaveFromFile
{
    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 (Exception)
        {
        }
    }
}

1 个答案:

答案 0 :(得分:4)

您正在检查列表是否为空,然后为列表中的第一项设置值,这是错误的。

您需要将新项目添加到列表中;

List<DTOSaveFromFile> lst = DiskFile.Load();
if (lst.Count == 0)
{
    lst.Add(new DTOSaveFromFile {
        reportName = item["report"].ToString(),
        time = DateTime.Now.ToString("dd-MM-yyyy")
    });
}
DiskFile.Save(lst);

更新(基于操作编辑): 由于您没有空构造函数,因此可以使用参数构造函数

List<DTOSaveFromFile> lst = DiskFile.Load();
if (lst.Count == 0)
{
    lst.Add(new DTOSaveFromFile(item["report"].ToString(), "", DateTime.Now.ToString("dd-MM-yyyy")));
}
DiskFile.Save(lst);