对于所有f#摇滚歌手来说,这应该是一个快速的方法,但是此刻让我陷于困境。

我正在尝试实现C#接口的F#类型

public interface ICrudService<T> where T: DelEntity, new()
{
    IEnumerable<T> GetAll();
}


这是在C#中的实现方式:

public IEnumerable<T> GetAll()
{
    return repo.GetAll();
}


repo.GetAll返回一个IQueryable,但是由于IEnumerable,c#编译器知道足以转换为IQueryable<T> : IEnumerable<T>的知识。但是在F#中,编译器无法工作,而我尝试了一些尝试以正确转换

type CrudService<'T when 'T :(new : unit -> 'T) and 'T :> DelEntity>(repo : IRepo<'T>) =
    interface ICrudService<'T> with
         member this.GetAll () =
            repo.GetAll<'T>


这给我一个类型不匹配的错误

最佳答案

您需要强制转换为IEnumerable<'T>

type CrudService<'T when 'T :(new : unit -> 'T) and 'T :> DelEntity>(repo : IRepo<'T>) =
        interface ICrudService<'T> with
             member this.GetAll () =
                repo.GetAll() :> IEnumerable<'T>

关于casting - 从IQueryable到IEnumerable,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23973233/

10-15 13:25