如何通过字符串分隔列表项以保存到文本文件

时间:2013-02-27 21:55:43

标签: c# file text report

我在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

1 个答案:

答案 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的公共接口。