【发布时间】:2022-02-20 03:28:22
【问题描述】:
我有一个需要枚举作为参数的 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”的无效转换。
【问题讨论】:
-
用
public partial class YourComponent<TEnum> : ComponentBase where TEnum : Enum试试后面的代码 -
((TEnum)Enum.ToObject(typeof(TEnum), Old)) -
谢谢布赖恩,
Enum.ToObjectworks。我必须将其转换为Enum而不是TEnum,因为TEnum不包含.HasFlag()的定义 -
使用代码背后的方法,它会因为它有一个枚举约束。
标签: generics enums blazor blazor-server-side