实现通用方法

时间:2017-11-15 18:49:54

标签: c# asp.net async-await

尝试实施此目的:

接口:

public interface IStoreReader
{
    Task<IEnumerable<T>> Get<T>(UserDb user);
}

实现:

public async Task<IEnumerable<ConversationDb>> Get<ConversationDb>(UserDb user)
{
    return await _convoRepo.Get(user.UserId); // error here
}

Convo回购:

public async Task<IEnumerable<ConversationDb>> Get(string userId)
{
      return await // get from db - this works fine
}

错误: enter image description here

2 个答案:

答案 0 :(得分:2)

当您在方法上定义泛型类型时,当您实现它时,您给出的名称将只是一个泛型类型。因此,它说你的回购中的具体类与恰好具有相同名称的通用类不同。我相信你实际上想要在你的界面上定义泛型类型。

public interface IStoreReader<T>
{
    Task<IEnumerable<T>> Get(UserDb user);
}

public class ConversationReader : IStorReader<ConversationDb>
{
    public async Task<IEnumerable<ConversationDb>> Get(UserDb user)
    {
        return await _convoRepo.Get(user.UserId); 
    }
}

答案 1 :(得分:0)

我认为在两个不同的命名空间中有两个名为ConversationDb的类。

repo返回的类型与实现中定义的类型不同。看看类型的定义,你会发现它们来自不同的地方。

错误信息非常清楚。您要求编译器强制转换:

System.Collections.Generic.IEnumerable<SomeNamespace.ConversationDb>

System.Collections.Generic.IEnumerable<ConversationDb>

您必须为第二种情况导入名称空间,但是repo正在返回第一种情况。