これは、 F# List of Union Typesでの私の質問の続きです。有益なフィードバックのおかげで、または のいずれかでReportある のリストを作成することができました。もう一度データ定義を次に示します。ReportDetailSummary
module Data
type Section = { Header: string;
Lines: string list;
Total: string }
type Detail = { State: string;
Divisions: string list;
Sections: Section list }
type Summary = { State: string;
Office: string;
Sections: Section list }
type Report = Detail of Detail | Summary of Summary
Reportという変数に のリストを取得したのでreports、これらのオブジェクトを繰り返し処理しReport、それぞれに基づいて操作を実行したいと思います。Detail.Divisionsまたは のいずれかを扱う場合を除いて、操作は同じSummary.Officeです。明らかに、私はそれらを別の方法で処理する必要があります。Stateしかし、同様のものを処理するためのすべてのコードを複製したくはありませんSections。
私の最初の(実用的な)アイデアは次のようなものです:
for report in reports do
let mutable isDetail = false
let mutable isSummary = false
match report with
| Detail _ -> isDetail <- true
| Summary _ -> isSummary <- true
...
Detail.Divisionsこれにより、ではなく、いつ処理するかを知る方法が得られますSummary.Office。しかし、それは私に作業するオブジェクトを与えません。私はまだ に固執しておりreport、それがどれであるか、DetailまたはSummaryであることがわかりません。また、属性にアクセスすることもできません。report適切なDetailorに変換しSummary、同じコードを使用していずれかのケースを処理したいと思いますが、 Detail.Divisionsandは例外ですSummary.Office。これを行う方法はありますか?
ありがとう。