我在C#中创建一个Windows窗体应用程序来存储有关汽车启动销售的详细信息,例如日期,位置,投球成本,是否用于慈善机构等。其中一个规格是必须具备保存一些信息到文本文件,如所有的汽车启动销售保存到carbootsaleall.txt文件,我还需要一个按钮来保存所有的慈善机构&非慈善汽车启动销售到不同的文本文件。
我已经编写了将所有汽车启动销售保存到文本文件中的代码,但我不确定如何将其他汽车启动销售分开,这取决于它们是用于慈善还是不用于其他文件。
这是我保存所有汽车启动销售按钮之间的代码:
List<CarBootSale> carbootsales = carBootSaleList.ReturnList();
textReportGenerator.GenerateAllReport(carbootsales, AppData.CARBOOTSALE);
MessageBox.Show("All Car Boot Sales have been written to the report file: " + AppData.CARBOOTSALE);
这是我在TextReportGenerator类中的代码:
public void GenerateAllReport<T>(List<T> aList, string filePath) where T : IDisplay
{
FileStream outFile;
StreamWriter writer;
outFile = new FileStream(filePath, FileMode.Create, FileAccess.Write);
writer = new StreamWriter(outFile);
foreach (T obj in aList)
{
writer.WriteLine(obj.Display());
}
writer.Close();
outFile.Close();
}
这是带有construtor等的CarBootSale类:
public class CarBootSale : IDisplay
{
public string ID { get; set; }
public string Date { get; set; }
public string Location { get; set; }
public double PitchCost { get; set; }
public int Capacity { get; set; }
public string Charity { get; set; }
public string CharityName { get; set; }
public string Catering { get; set; }
public CarBootSale(string id, string date, string location, double pitchcost, int capacity, string charity, string charityname, string catering)
{
ID = id;
Date = date;
Location = location;
PitchCost = pitchcost;
Capacity = capacity;
Charity = charity;
CharityName = charityname;
Catering = catering;
}
我如何修改TextReportGenerator类中的按钮代码和代码,以便还可以选择将慈善汽车启动销售保存到carbootsalecharity.txt
答案 0 :(得分:2)
using System.Linq;
...
foreach (var obj in aList.Where(x -> x.Charity.ToLower() == "yes")
{
writer.WriteLine(obj.Display());
}
如果你需要比这更多的概括(即你需要它适用于任何T),请查看Predicate Builder或Dynamic Linq,或者让T继承一个包含Charity的公共接口。