方法接受未指定/通用的枚举

时间:2014-02-28 12:51:46

标签: c# asp.net-mvc enums

我在搜索时使用Enums进行排序列,因此我有不同类型的枚举,即。

public enum SortablePersonFields
{
    Id,
    Name
}

public enum SortableCarFields
{
    Color,
    Price
}

我目前有一个帮助我为我的视图生成列标题的辅助方法,它需要知道搜索当前按哪个列排序:

public static IHtmlString SortablePersonHeader(this AjaxHelper helper, string headerTitle, SortablePersonFields sortablePersonField, ISortableSearchCriteria searchCriteria){
    if (searchCriteria.SortablePersonField== sortablePersonField)
        {
        ...
        }
    }

我希望通过让它接受一个未指定的Enum来使这个方法变得通用,但我发现这很困难,因为Enums不支持接口或继承。这有什么好办法吗?

ISortableSearchCriteria目前有一个SortablePersonFields,所以它也需要是通用的。

1 个答案:

答案 0 :(得分:2)

没有枚举约束,但您可以执行以下操作:

ISortable<TEnum> where TEnum : struct, IComparable
{
    TEnum Sort { get; }
}

public static IHtmlString SortablePersonHeader<TEnum>(this AjaxHelper helper, string headerTitle, TEnum sort, ISortable<TEnum> searchCriteria)
    where TEnum : struct, IComparable
{
    if(! typeof(TEnum).IsEnum) throw new ArgumentException("Requires enum type");
    if(sort.Equals(searchCriteria.Sort))
    {
    }
}