c# - 如何在 C# 中将类型转换为 TEnum

标签 c# .net enums

我有一个 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>();

如何转换TypeTEnum ?我在做不可能或错误的事情吗?有没有更好的方法来做到这一点?请帮助我。

最佳答案

类似于:

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

?

关于c# - 如何在 C# 中将类型转换为 TEnum,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58429927/

相关文章:

C# WinForms : Drawing with one or more additional threads. 怎么办?

System.Drawing.Bitmap 中的 C# OutOfMemoryException

enums - 你能引用一个命名的枚举,就好像它在 D 中是匿名的一样吗?

c# - 引用值的 'Type'存放在内存的什么地方?

c# - 具有多个值的资源文件(或通过代码访问注释列)

mysql - 通过字段重新映射在同一服务器上复制表数据

c# - RavenDB - 为什么IAsyncDocumentSession中没有DeleteAsync方法

c# - 如何从gridview向数据库添加信息?

c# - 如何连接到本地数据库的mdf,该数据库给出 "sql network interfaces error 52"

c# - 从内存流中读取存储的 PDF