我有一个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'的无效转换。
答案 0 :(得分:0)
您需要在生命周期EnumType
或OnInitialized(){ ... }
上为对象OnInitializedAsync(){ ... }
设置值。
参考文档:https://docs.microsoft.com/en-us/aspnet/core/blazor/components/lifecycle?view=aspnetcore-3.1