これは、 F# List of Union Typesでの私の質問の続きです。有益なフィードバックのおかげで、または のいずれかでReport
ある のリストを作成することができました。もう一度データ定義を次に示します。Report
Detail
Summary
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
適切なDetail
orに変換しSummary
、同じコードを使用していずれかのケースを処理したいと思いますが、 Detail.Divisions
andは例外ですSummary.Office
。これを行う方法はありますか?
ありがとう。