Generics 将枚举传递给Blazor组件';s参数
我有一个Razor组件,它需要一个枚举作为参数。我已经读到您应该使用Generics 将枚举传递给Blazor组件';s参数,generics,enums,blazor,blazor-server-side,Generics,Enums,Blazor,Blazor Server Side,我有一个Razor组件,它需要一个枚举作为参数。我已经读到您应该使用@typeparam来传递泛型类型,但是当我尝试使用变量名EnumType时,每次键入EnumType时都会出现以下错误 找不到类型或命名空间名称EnumType(是否缺少using指令或程序集引用 代码大致如下所示: @typeparam TEnum @foreach(Enum.GetValues中的EnumType标志(typeof(EnumType))) { if((枚举类型)Old.HasFlag(标志)) { if((
@typeparam
来传递泛型类型,但是当我尝试使用变量名EnumType
时,每次键入EnumType
时都会出现以下错误
找不到类型或命名空间名称EnumType
(是否缺少using指令或程序集引用
代码大致如下所示:
@typeparam TEnum
@foreach(Enum.GetValues中的EnumType标志(typeof(EnumType)))
{
if((枚举类型)Old.HasFlag(标志))
{
if(((枚举类型)新建).HasFlag(标志))
{
@EnumExtensions.GetEnumDisplayName(标志)
}
其他的
{
@EnumExtensions.GetEnumDisplayName(标志)
}
}
}
@代码{
[参数]
公共TEnum枚举类型{get;set;}
//^唯一一次我没有得到错误
[参数]
公共int Old{get;set;}
[参数]
public int New{get;set;}
}
编辑:我休息了一会,回来看看我的代码,发现它毫无意义。后来我将它更新为类似:
@typeparam TEnum
@foreach(Enum.GetValues中的枚举标志(typeof(TEnum)))
{
if(((枚举)Convert.ChangeType(Old,typeof(TEnum)).HasFlag(flag))
{
if(((Enum)Convert.ChangeType(New,typeof(TEnum))).HasFlag(flag))
{
@EnumExtensions.GetEnumDisplayName(标志)
}
其他的
{
@EnumExtensions.GetEnumDisplayName(标志)
}
}
}
@代码{
[参数]
公共int Old{get;set;}
[参数]
public int New{get;set;}
}
我现在在((Enum)Convert.ChangeType(Old,typeof(TEnum))
上收到一个错误,上面说:
从“System.Int32”到“DataAccessLibrary.Enums.TimelineinfoEnums+错误管道Enum”的强制转换无效
您需要在生命周期
OnInitialized(){…}
或OnInitializedAsync(){…}
中为对象EnumType
设置值
参考文档:是的,如果我要正确使用该变量,我需要这样做,但因为我只需要类型,而不需要变量,我从一开始就不需要
EnumType
。我已经更新了问题,以更好地反映我应该做什么以及我现在面临的问题。请使用public部分代码尝试代码隐藏类YourComponent:ComponentBase其中TEnum:Enum
((TEnum)Enum.ToObject(typeof(TEnum),Old))
谢谢Brian,Enum.ToObject
起作用。我必须将其转换为Enum
而不是TEnum
,因为TEnum
不包含的定义
使用代码隐藏方法时,它将具有枚举约束。