c# - 类实现抽象类的通用类型约束

标签 c# generics abstract-class

我有一个 Generic Abstract Class 具有一些属性,例如 IdNameStatus,此类继承几个目录。 我的问题是是否可以创建一个对实现抽象类的目录有限制的方法。

我举一些例子让他们明白我想做什么:

public abstract class AbsCatalog<T>
{
    public T Id { get; set; }
    public string Name { get; set; }
    public bool Status { get; set; }
}

这些是实现抽象类

的类
public class Agent : AbsCatalog<string>
{
    public string Office { get; set; }
    public Estado Estado { get; set; }
}

public class Models : AbsCatalog<int>
{
    public int Year { get; set; }
    public string Description { get; set; }
}

我要实现的方法如下:

List<Agent> Agents = service.GetAgents();
string AgentsDescription = GetDescription<Agent>(Agents);

List<Model> Models = service.GetModels();
string ModelsDescription = GetDescription<Model>(Models);

private string GetDescription<T>(List<T> list) where T : AbsCatalog<T>
{
    string description = string.Empty;

    if (list.Exists(x => x.Id.ToString() == "0"))
        description = "";
    else
        description = string.Join(", ", list.Where(x => x.Status).Select(x => x.Name).ToArray());

    return description;
}

最佳答案

我认为唯一的办法就是在这里使用两个泛型类型参数,例如:

private string GetDescription<T, U>(List<T> list) where T : AbsCatalog<U>
{
    //snip   
}

然后这样调用它:

string AgentsDescription = GetDescription<Agent, string>(Agents);

关于c# - 类实现抽象类的通用类型约束,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45845174/

相关文章:

c# - 如何使用 asp.net MVC 通过模型属性显示 YouTube 链接?

c# - 当我打开 Excel 时出现第二个 Excel 插件(功能区)安装,为什么?

c# - 我可以应用一些代码,例如 catch,如果数据库关闭或无法连接,应用程序不应停止并退出

java - 在 Java 中使用泛型类型和 String.format

java - 为什么java抽象类中需要Protected构造函数

c++ - 编译器将派生类视为实际定义的抽象引用函数

c++ - 让编译器告诉哪些方法不具体而不是错误 'invalid new-expression of abstract class type'

c# - .NET 和数据库层

c# - 什么时候应该在 C# 2.0 和更新版本中使用 `Object`?泛型会替换所有出现的对象吗?

java - 如何从 Java 中的参数将项目添加到数组通用对象中