C#语言Ext

时间:2017-09-06 07:03:41

标签: c# functional-programming pattern-matching

我在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产品。但我不确定你是否可以使用它来模式匹配类型。

如果有人使用此语言扩展程序,我将如何实现此目标?话虽如此,如果有更好的方式来思考这个问题,我很乐意考虑不同的东西。

1 个答案:

答案 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);

它涉及一些手动格式化,但非常有吸引力且极小。它不会进行完整性检查,但会强制您提供默认值。

相关问题