我有一个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"的强制转换无效。
您需要在生命周期OnInitialized(){ ... }
或OnInitializedAsync(){ ... }
中为对象EnumType
设置值。
参考文件:https://learn.microsoft.com/en-us/aspnet/core/blazor/components/lifecycle?view=aspnetcore-3.1
我刚刚遇到了这个问题。在你的代码中声明一个你需要的类型(枚举(的变量,然后
<TargerComponent ParameterThatNeesdEnum="@YourTypedVariable">