0

C# で Windows フォーム アプリケーションを作成して、カー ブート セールに関する詳細 (日付、場所、売り込み費用、慈善団体などの場合) を保存しています。仕様の 1 つは、いくつかの情報を保存する機能が必要であるということです。すべてのカー ブート セールを 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 を確認するか、Charity を含む共通インターフェイスを T に継承させます。

于 2013-02-27T21:57:49.687 に答える