C# 实现泛型方法

C# 实现泛型方法,c#,asp.net,async-await,C#,Asp.net,Async Await,试图实现这一点: 接口: public interface IStoreReader { Task<IEnumerable<T>> Get<T>(UserDb user); } 公共接口IStoreReader { 任务获取(UserDb user); } 实施: public async Task<IEnumerable<ConversationDb>> Get<ConversationDb>(UserDb u

试图实现这一点:

接口:

public interface IStoreReader
{
    Task<IEnumerable<T>> Get<T>(UserDb user);
}
公共接口IStoreReader
{
任务获取(UserDb user);
}
实施:

public async Task<IEnumerable<ConversationDb>> Get<ConversationDb>(UserDb user)
{
    return await _convoRepo.Get(user.UserId); // error here
}
公共异步任务Get(UserDb user) { return wait _convalrepo.Get(user.UserId);//此处出错 } 护航回购:

public async Task<IEnumerable<ConversationDb>> Get(string userId)
{
      return await // get from db - this works fine
}
公共异步任务Get(字符串userId) { return wait//get from db-这工作正常 } 错误:

当您在方法上定义泛型类型时,当您实现它时,您给出的名称将只是泛型类型。因此,这意味着来自repo的具体类与恰好具有相同名称的泛型类不同。我相信您实际上希望在接口上定义泛型类型

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); 
    }
}
公共接口IStoreReader
{
任务获取(UserDb user);
}
公共类会话阅读器:IStorReader
{
公共异步任务Get(UserDb user)
{
return wait_converapo.Get(user.UserId);
}
}

当您在方法上定义泛型类型时,当您实现它时,您给出的名称将只是泛型类型。因此,这意味着来自repo的具体类与恰好具有相同名称的泛型类不同。我相信您实际上希望在接口上定义泛型类型

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); 
    }
}
公共接口IStoreReader
{
任务获取(UserDb user);
}
公共类会话阅读器:IStorReader
{
公共异步任务Get(UserDb user)
{
return wait_converapo.Get(user.UserId);
}
}

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

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

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

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

System.Collections.Generic.IEnumerable

您必须已经为第二个案例导入了名称空间,但repo正在返回第一个案例。

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

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

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

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

System.Collections.Generic.IEnumerable

您必须已导入第二个案例的命名空间,但repo正在返回第一个案例。

请不要粘贴错误图像。在我看来,您有两个名为
ConversationDb
的类来自两个不同的命名空间。
ConversationDb
在您的方法中是泛型类型,因为您无法告诉它实际类型是,因为它是在方法上定义的。您可能打算使用
IStoreReader
Get(UserDb user)
。请不要粘贴错误图像。在我看来,您有两个名为
ConversationDb
的类来自两个不同的名称空间。您的方法中的
ConversationDb
是泛型类型,因为您无法告诉它实际类型是什么,因为它是在方法上定义的。您可能打算使用
IStoreReader
Get(UserDb user)
。不。我确定了。只有one@BobSwanson:我真诚地怀疑,如果没有模糊部分,就不可能帮助您。一个是在
Get
method.nope上定义的泛型类型名称。我确定了。只有one@BobSwanson:我真诚地怀疑,如果没有模糊部分,就不可能帮助您。一个是在
Get
方法上定义的泛型类型名称。这很有效。谢谢你,这很有效。非常感谢。