c# - 返回作为 C# 中的集合的泛型类型

标签 c# .net generics

我已经定义了一个可以通用方式实现的接口(interface)。返回类型必须是一个集合,而输入参数可以是类或值。

public interface IDataRetriever<T, C> where T : ICollection<string>
{

    T GetData(C criteria);
}

当我尝试返回一个列表时,出现错误“类型参数 T 不能与 as 操作一起使用,因为它没有类类型。” 尝试删除“as T”,但这也不起作用。

如果我替换 where T : ICollection<string>List<string>有用。这里有什么不正确的地方?

public class CustomADataRetrieverImpl<T, C>: IDataRetriever<T, C> 
             where T : ICollection<string>
{

    public T GetData(C criteria)
    {

        string myCriteria = criteria as string;
        ICollection<string> data = new List<string>()
            ...
        return data as T;
    }
}

最佳答案

as 期望 T 是引用(或可空)类型,这意味着对类的约束也应包含在您的签名中。

public interface IDataRetriever<T, C>
    where T : ICollection<string>, class

{
    T GetData(C criteria);
}

正如 Jason 在评论中提到的,如果 T 不是字符串类型或从 T 派生的类型,则返回 null。但是,由于您的约束指定您期望 ICollection<T>是字符串,这似乎可以接受,因为您的问题目前已写好。

关于c# - 返回作为 C# 中的集合的泛型类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30314385/

相关文章:

c# - 最大还是默认?

java - 类型参数 vs 无限通配符

c# - C# 和 Java 中的泛型与 C++ 中的模板有什么区别?

c# - 结构中指针字段的大小

c# - 我对数据时间选择器和日期时间感到困惑。需要一些帮助

c# - 具有自定义动态列的 JSON 字符串。在 C# 中追加

TypeScript defaultIfUndefined 函数类型

c# - 事件不是领域——我不明白

c# - 我应该在后台线程中使用异步方法吗?

c# - 前向消除实现的问题