Как конвертировать Type в TEnum в C # - PullRequest
1 голос
/ 17 октября 2019

У меня есть EnumSearchExpressionProvider<TEnum> класс. Мне нужно назначить экземпляр этого класса внутри атрибута с именем SearchableEnumAttribute.

Вот мой EnumSearchExpressionProvider<TEnum>,

public class EnumSearchExpressionProvider<TEnum> : StringSearchExpressionProvider where TEnum : struct
{
    public override ConstantExpression GetValue(string input)
    {
        if (!Enum.TryParse<TEnum>(input.Trim().Replace(" ", string.Empty), true, out var value))
        {
            throw new ArgumentException("Invalid search value.");
        }

        return Expression.Constant(value);
    }
}

Вот мой класс SearchableEnumAttribute,

[AttributeUsage(AttributeTargets.Property)]
public class SearchableEnumAttribute : SearchableAttribute
{
    public SearchableEnumAttribute(Type enumType)
    {
        ExpressionProvider = new EnumSearchExpressionProvider<enumType>();
    }
}

В моей модели я использую этот атрибут для одного из свойств, как,

[SearchableEnum(typeof(Position))]
public string Position { get; set; }

здесь мой Position Enum,

public enum Position
{
    [Display(Name = "Accountant")]
    Accountant,
    [Display(Name = "Chief Executive Officer (CEO)")]
    ChiefExecutiveOfficer,
}

Однако яполучаю ошибку компиляции в этой строке в моем конструкторе SearchableEnumAttribute,

ExpressionProvider = new EnumSearchExpressionProvider<enumType>();

Как преобразовать Type в TEnum? Я делаю что-то невозможное или неправильное? Есть ли лучший способ сделать это? Пожалуйста, помогите мне.

1 Ответ

4 голосов
/ 17 октября 2019

что-то вроде:

ExpressionProvider = (StringSearchExpressionProvider)Activator.CreateInstance(
    typeof(EnumSearchExpressionProvider<>).MakeGenericType(enumType));

?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...