我在C#中使用模式匹配来遍历一个类似DOM的解析树,并认为这似乎是一种能够处理整个RTF DOM的不同子节点的简洁方法。 e.g。
RTFDOM
RTFDOMText
RTFDOMParagraph
RTFDOMTable
RTFDOMRow
RTFDOMCell
RTFDOMCell
RTFDOMParagraph
etc ...
使用.Net 4并且一直在使用Matthew Podwysocki的版本,该版本为类型上的模式匹配提供以下样式...
var result = RTFDOM.Elements
.Aggregate(...,
(seed, el) =>
{
var r = el.Match()
.With<RTFDOMText>(st1 => ...)
.With<RTFDOMTable>(st2 => ...)
.Default(_ => ...)
.Return<MyNewType>()
...
});
我刚刚遇到this基于nuget的c#语言扩展,提供了更广泛的FP产品。但我不确定你是否可以使用它来模式匹配类型。
如果有人使用此语言扩展程序,我将如何实现此目标?话虽如此,如果有更好的方式来思考这个问题,我很乐意考虑不同的东西。
答案 0 :(得分:2)
language-ext author here:)
C#中任何模式匹配框架的问题在于它无法进行完整性检查,而且通常非常笨重。出于这个原因,我决定不实施通用系统。我在自己的项目中使用的方法是使用三元运算符和C#7的内置模式匹配:
var result = el is RTFDOMText text ? UseTheText(text)
: el is RTFDOMTable table ? UseTheTable(table)
: HandleDefault(el);
它涉及一些手动格式化,但非常有吸引力且极小。它不会进行完整性检查,但会强制您提供默认值。