C# 枚举中的单选按钮组

C# 枚举中的单选按钮组,c#,asp.net-mvc,enums,C#,Asp.net Mvc,Enums,我正试图为枚举类型提供一个通用的视图模型和编辑器模板,以便将可能的值呈现到单选按钮组中。让我详细说明一下 虚拟机看起来是这样的 public class OptionViewModel<TEnum> where TEnum : struct, IConvertible { public TEnum SelectedValue { get; set; } } 公共类选项ViewModel,其中TEnum:struct,IConvertible { 公共TEnum Selecte

我正试图为枚举类型提供一个通用的视图模型和编辑器模板,以便将可能的值呈现到单选按钮组中。让我详细说明一下

虚拟机看起来是这样的

public class OptionViewModel<TEnum> where TEnum : struct, IConvertible
{
   public TEnum SelectedValue { get; set; }
}
公共类选项ViewModel,其中TEnum:struct,IConvertible
{
公共TEnum SelectedValue{get;set;}
}
然后,我可以通过编写

public enum Numbers { One, Two, Three }

...
NumberOptions = new OptionViewModel<Numbers>();
...
公共枚举数{1,2,3}
...
NumberOptions=新选项ViewModel();
...
然后通过

@model OptionViewModel<TEnum>

@foreach (var value in Enum.GetValues(typeof(TEnum)).Cast<TEnum>())
{
   var selected = value == Model.SelectedValue;

   @Html.RadioButton(value.ToString(), value, selected)
}
@model选项viewmodel
@foreach(Enum.GetValues(typeof(TEnum)).Cast()中的var值)
{
选择的变量=值==模型.SelectedValue;
@RadioButton(value.ToString(),value,选中)
}
不幸的是,模板甚至没有编译,因为当然没有类型“TEnum”


有更好的(有效的)方法吗?我真的得到了这种抽象级别,因为Enum中的单选按钮组在我的项目中是一种相当常见的情况,它附带了额外的属性,比如IsVisible,IsEnabled等。

我会将枚举值作为字符串存储在视图模型中,并创建一个接受通用参数的函数来创建视图模型

public class OptionViewModel
{
   public string SelectedValue { get; set; }
   public List<string> Values { get; set; }

   public static OptionViewModel Create<TEnum>() where TEnum : struct, IConvertible
   {
        var ovm = new OptionViewModel();
        foreach (var value in Enum.GetValues(typeof(TEnum)).Cast<TEnum>())
        {
             ovm.Values.Add(value);
        }
        return ovm;
   }
}
NumberOptions = OptionViewModel.create<Numbers>();
@model OptionViewModel

@foreach (var value in model.Values)
{
   var selected = value == Model.SelectedValue;

   @Html.RadioButton(Model.SelectedValue, value, selected)
}