我遇到了问题。我需要编写一个csv文件(whit append),但我不能写出文件中重复的项目。所以:
我读了csv文件中的所有项目,我将项目添加到我的列表中(然后我写入文件),我想在写入文件之前从列表中删除重复...我尝试使用"不同"但它没有用。
我的课程:
class MyList_Base
{
public string Cliente {get; set; }
public double TotaleProvvigione { get; set; }
public double TotalePunti { get; set; }
public string Descrizione { get; set; }
public double Pezzi { get; set; }
public double Provvigione { get; set; }
public bool DigitalPen { get; set; }
public bool ReferenzaPersonale { get; set; }
public DateTime Data { get; set; }
public string Mese { get; set; }
public string Gara { get; set; }
public double PuntiGara { get; set; }
public string Note { get; set; }
public MyList_Base(string cliente, double totaleProvvigione, double totalePunti, string descrizione, double pezzi, double provvigione, bool digitalPen, bool referenzaPersonale, DateTime data, string mese, string gara, double puntiGara, string note)
{
Cliente = cliente;
TotaleProvvigione = totaleProvvigione;
TotalePunti = totalePunti;
Descrizione = descrizione;
Pezzi = pezzi;
Provvigione = provvigione;
DigitalPen = digitalPen;
ReferenzaPersonale = referenzaPersonale;
Data = data;
Mese = mese;
Gara = gara;
PuntiGara = puntiGara;
Note = Note;
}
public override string ToString()
{
return Cliente + ";" + TotaleProvvigione + ";" + TotalePunti + ";" + Descrizione + ";" + Pezzi + ";" + Provvigione + ";" + DigitalPen + ";" + ReferenzaPersonale + ";" + Data + ";" + Mese + ";" + Gara + ";" + PuntiGara+";" + Note;
}
public static MyList_Base Parse(string csv)
{
string[] tmp = csv.Split(';');
return new MyList_Base(tmp[0], Convert.ToDouble(tmp[1]), Convert.ToDouble(tmp[2]), tmp[3], Convert.ToDouble(tmp[4]), Convert.ToDouble(tmp[5]), Convert.ToBoolean(tmp[6]), Convert.ToBoolean(tmp[7]), Convert.ToDateTime(tmp[8]), tmp[9], tmp[10], Convert.ToDouble(tmp[11]), tmp[11]);
}
}
这就是我需要做的事情:" // TODO:删除重复"
public List<MyList_Base> LoadMyData(string nomeFile)
{
if (!File.Exists(nomeFile)) return null;
List<MyList_Base> tmp = new List<MyList_Base>();
StreamReader sr = new StreamReader(nomeFile);
while(!sr.EndOfStream)
{
tmp.Add(MyList_Base.Parse(sr.ReadLine()));
}
sr.Close();
return tmp;
}
public bool Save(string nomeFile)
{
var tmp = LoadMyData(nomeFile);
StreamWriter sw = new StreamWriter(nomeFile);
//TODO: REMOVE DUPLICATE
foreach (var x in this)
{
sw.WriteLine(x.ToString());
}
sw.Close();
return true;
}
有人可以帮助我吗?
PS:抱歉我的英文不好.. 法比奥。答案 0 :(得分:2)
Enumerable.Distinct
扩展方法可以为您提供帮助。
如果您无法使用默认(IEqualityComparer
Equals
方法),则会有overload MyList_Base
。如果例如这可能是这种情况。您的Equals
方法只会比较某些字段,但您需要检查所有字段。
答案 1 :(得分:0)
您可以使用列表的Distinct扩展方法并传递实现IEqualityComparer的对象。检查一下:
http://blog.alex-turok.com/2013/03/c-linq-and-iequalitycomparer.html