我有一个 EnumSearchExpressionProvider<TEnum>
类(class)。我需要在名为 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
枚举,
public enum Position
{
[Display(Name = "Accountant")]
Accountant,
[Display(Name = "Chief Executive Officer (CEO)")]
ChiefExecutiveOfficer,
}
但是我在 SearchableEnumAttribute
的这一行中遇到编译错误构造函数,
ExpressionProvider = new EnumSearchExpressionProvider<enumType>();
如何转换Type
至 TEnum
?我在做不可能或错误的事情吗?有没有更好的方法来做到这一点?请帮助我。
最佳答案
类似于:
ExpressionProvider = (StringSearchExpressionProvider)Activator.CreateInstance(
typeof(EnumSearchExpressionProvider<>).MakeGenericType(enumType));
?
关于c# - 如何在 C# 中将类型转换为 TEnum,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58429927/