繁体   English   中英

如何将受歧视的联合从C#传递给F#函数(F# - C#interop)

[英]How to pass a discriminated union from C# to a F# function (F# - C# 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<unit, DomainMessage>

这是C#代码:

public class ItemEventHandlers
{
    private readonly IItemWriteAccess _repository;

    public ItemEventHandlers(IItemWriteAccess repository)
    {
        _repository = repository;
    }

    public void Handle(ItemCreated msg)
    {
        if(msg == null) throw new ArgumentNullException("msg");

        _repository.Update(msg); // this doesn't work
    }
}

这会产生以下错误消息:

Argument 1: cannot convert from 'DomainModels.ItemCreated' to 'DomainModels.ItemEvent'

向上转换为ItemEvent也不起作用。

我该如何解决这个问题?

由于Update采用ItemEvent ,因此无法将ItemCreated实例作为参数传递。

我必须创建一个ItemEvent并将ItemCreated实例传递给构造函数,如下所示:

var @event = ItemEvent.NewItemCreated(msg);

然后我可以将它传递给Update

public void Handle(ItemCreated msg)
{
    if(msg == null) throw new ArgumentNullException("msg");

    var @event = ItemEvent.NewItemCreated(msg);
    _repository.Update(@event);
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM