我尝试在列出<>时添加值列表是空的。
但有错误: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)
{
}
}
}
答案 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);