将空类发送给通用类作为C#中的默认参数

时间:2019-03-13 13:40:15

标签: c#

我有一个QueryFilter<TSearchFilter>类(请参见下文)。我创建了一个从该类继承的QueryFilter类。我当前正在使用QueryFilter而不指定类型,例如:

var queryFilter = new QueryFilter();

为此,我创建了一个伪造的EmptySearchFilter类来实现此目的。这很完美;没问题。

public class QueryFilter<TSearchFilter> where TSearchFilter : class
{
    public QueryFilter()
    {
        SearchFilter = (TSearchFilter)Activator.CreateInstance(typeof(TSearchFilter));
    }
    public string SortBy { get; set; }
    public int PageFirstIndex { get; set; }
    public byte PageSize { get; set; }
    public TSearchFilter SearchFilter { get; set; }
}

public class QueryFilter : QueryFilter<EmptySearchFilter> { }

public class EmptySearchFilter { }

但是,我认为也许可以通过以下方式避免使用这种假类(EmptySearchFilter):

public class QueryFilter : QueryFilter<typeof(Class)>{ }

有没有办法做到这一点?

1 个答案:

答案 0 :(得分:2)

您可以像这样反转继承链:

public class QueryFilter 
{ 
    public string SortBy { get; set; }
    public int PageFirstIndex { get; set; }
    public byte PageSize { get; set; }
}

public class QueryFilter<TSearchFilter> : QueryFilter 
    where TSearchFilter : class, new() 
{
    public QueryFilter()
    {
        SearchFilter = new TSearchFilter();
    }
    public TSearchFilter SearchFilter { get; set; }
}

这样,QueryFilter不需要使用伪造的类。

此外,我添加了一个new()约束来摆脱Activator.CreateInstance的调用。