0

我正在用 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();
    }

这是带有构造器等的 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

4

1 回答 1

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

于 2013-02-27T21:57:49.687 回答