如何将有区别的并集从C传递到F函数(F#-C#互操作)
模型的定义:如何将有区别的并集从C传递到F函数(F#-C#互操作),c#,.net,f#,interop,C#,.net,F#,Interop,模型的定义: type ItemEvent = | ItemCreated of ItemCreated and ItemCreated = { timestamp:DateTime; id:ItemId; name:string; description:string option } interface IEvent 下面是我要调用的方法的接口: type IItemWriteAccess = abstract Update: ItemEvent -> Result<u
type ItemEvent =
| ItemCreated of ItemCreated
and ItemCreated = { timestamp:DateTime; id:ItemId; name:string; description:string option } interface IEvent
下面是我要调用的方法的接口:
type IItemWriteAccess =
abstract Update: ItemEvent -> Result<unit, DomainMessage>
这将产生以下错误消息:
Argument 1: cannot convert from 'DomainModels.ItemCreated' to 'DomainModels.ItemEvent'
向上转换到ItemEvent
也不起作用
如何解决此问题?由于
Update
接受ItemEvent
,因此无法将ItemCreated
实例作为参数传递
我必须创建一个ItemEvent
并将ItemCreated
实例传递给构造函数,如下所示:
var @event = ItemEvent.NewItemCreated(msg);
然后我可以将其传递到更新:
public void Handle(ItemCreated msg)
{
if(msg == null) throw new ArgumentNullException("msg");
var @event = ItemEvent.NewItemCreated(msg);
_repository.Update(@event);
}
您可能想在c中使用ItemEvent msg
,是的,可能是这样ItemEvent.NewItemCreated(NewItemCreated(…)
-我会试试。它的工作原理如下:\u repository.Update(ItemEvent.NewItemCreated(msg))什么是DU?另外,如果你找到了自己问题的答案,记得你也可以在一段时间后发布passed@knocte谢谢你指出这一点。我会的。
public void Handle(ItemCreated msg)
{
if(msg == null) throw new ArgumentNullException("msg");
var @event = ItemEvent.NewItemCreated(msg);
_repository.Update(@event);
}