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

时间:2015-09-15 08:25:12

标签: 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<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的向上转换也不起作用。

我该如何解决这个问题?

1 个答案:

答案 0 :(得分:1)

由于$.validator.addMethod('le', function (value, element, param) { return this.optional(element) || parseInt(value) <= parseInt($(param).val()); }, 'Invalid value'); 采用Update,因此ItemEvent实例不能作为参数传递。

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

ItemCreated

然后我可以将其传递给var @event = ItemEvent.NewItemCreated(msg);

Update