Generic Type Constraint,其中类实现抽象类

时间:2017-08-23 16:39:47

标签: 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; }
}

这些是实现abstract class

的类
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;
}

1 个答案:

答案 0 :(得分:4)

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

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

然后像这样称呼它:

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