【发布时间】:2019-03-05 18:01:23
【问题描述】:
我正在使用 ROP(面向铁路的编程),在 SQLite 包装器中根据 swlaschin 对其进行建模:
我正在返回 RopResult 类型:
type RopResult<'TSuccess, 'TMessage> =
| Success of 'TSuccess * 'TMessage list
| Failure of 'TMessage list
在 F# 中,所有的工作都很好,但有时我仍然需要与 C# 互操作,并且在返回 RopResult 时,事情就崩溃了。即:
RopResult<seq 't, DomainMessage>
如何访问那些“属性”(即 C# 的 ienumerable),而不必将其转换为 dynamic:
var ropResult = dao.All; // RopResult<seq 't, DomainMessage>
var dyn = ropResult as dynamic;
foreach (SomeClass item in dyn.Item1)
{
Console.WriteLine(item.Id);
}
【问题讨论】:
-
您需要对
RopResult类型进行模式匹配,这是 C# 无法做到的。我想你最好的选择是从 F# 中提供一些“适配器”函数,这些函数比实际的可区分联合更 C# 友好。