将枚举传递给Blazor组件的参数

时间:2020-11-08 06:36:47

标签: generics enums blazor blazor-server-side

我有一个Razor组件,需要一个枚举作为参数。我已经读到您应该使用@typeparam来传递通用类型,但是当我尝试使用变量名EnumType时,每次我都会收到以下错误消息输入EnumType

找不到类型或名称空间名称EnumType(您是否缺少using指令或程序集引用?

代码大致如下:

@typeparam TEnum


@foreach (EnumType flag in Enum.GetValues(typeof(EnumType)))
    {
        if (((EnumType)Old).HasFlag(flag))
        {
            if (((EnumType)New).HasFlag(flag))
            {
                <li>@EnumExtensions.GetEnumDisplayName(flag)</li>
            }
            else
            {
                <li class="deleted-li">@EnumExtensions.GetEnumDisplayName(flag)</li>
            }

        }
    }

@code{
    [Parameter]
    public TEnum EnumType { get; set; }
    //          ^ only time I dont get the error

    [Parameter]
    public int Old { get; set; }

    [Parameter]
    public int New { get; set; }
}

编辑:我休息了一会儿,然后回头看一下我的代码,发现它毫无意义。此后,我对其进行了更新,使其类似:

@typeparam TEnum

@foreach (Enum flag in Enum.GetValues(typeof(TEnum)))
    {
        if (((Enum)Convert.ChangeType(Old, typeof(TEnum))).HasFlag(flag))
        {
            if (((Enum)Convert.ChangeType(New, typeof(TEnum))).HasFlag(flag))
            {
                <li>@EnumExtensions.GetEnumDisplayName(flag)</li>
            }
            else
            {
                <li class="deleted-li">
                    @EnumExtensions.GetEnumDisplayName(flag) 
                 </li>
            }

        }
    }
@code{
    [Parameter]
    public int Old { get; set; }
    [Parameter]
    public int New { get; set; }
}

我现在在((Enum)Convert.ChangeType(Old, typeof(TEnum))上收到一条错误消息:

从'System.Int32'到'DataAccessLibrary.Enums.TimelineinfoEnums + MisconductEnum'的无效转换。

1 个答案:

答案 0 :(得分:0)

您需要在生命周期EnumTypeOnInitialized(){ ... }上为对象OnInitializedAsync(){ ... }设置值。

参考文档:https://docs.microsoft.com/en-us/aspnet/core/blazor/components/lifecycle?view=aspnetcore-3.1