这是我在F# List of Union Types上的问题的延续。多亏了有用的反馈,我能够创建一个Report
s 列表,其中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
在一个名为 的变量中获得了 s的列表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
orSummary
然后使用相同的代码来处理任何一种情况,除了Detail.Divisions
and Summary.Office
。有没有办法做到这一点?
谢谢。