我有许多要存储为静态变量的列表,因此它们被明确命名。
Gender
,MaritalStatus
和ResidentalStatus
都是枚举类型。
static readonly Lazy<IEnumerable<EnumDto>> _gender = GetLazyOptions<Gender>();
static readonly Lazy<IEnumerable<EnumDto>> _maritalStatus = GetLazyOptions<MaritalStatus>();
static readonly Lazy<IEnumerable<EnumDto>> _residentalStatus = GetLazyOptions<ResidentialStatus>();
我需要能够使用通用方法访问相应的字段-类似于以下内容:
public static IEnumerable<EnumDto> GetOption1<TEnum>() where TEnum : Enum
{
}
public static IEnumerable<EnumDto> GetOptions2<TEnum>(this TEnum @enum) where TEnum : Enum
{
}
然后的想法是,然后使用switch
语句(从Enum类型中)找到正确的字段,但是到目前为止,我还无法使它在语法上对我有用:
switch(typeof(@enum))
{
case Gender: return _gender;
}
我已经签出了该线程,但是没有成功:
任何建议表示赞赏。
答案 0 :(得分:1)
也许尝试做这样的事情:
return
然后您可以像这样配置public class Dtos
{
private Dictionary<Type, Func<IEnumerable<EnumDto>>> _lists
= new Dictionary<Type, Func<IEnumerable<EnumDto>>>();
public void Add<T>(Func<IEnumerable<EnumDto>> factory)
{
_lists[typeof(T)] = factory;
}
public IEnumerable<EnumDto> Get<T>()
{
return _lists[typeof(T)]();
}
}
:
Dtos
然后检索它们很简单:
var dtos = new Dtos();
dtos.Add<Gender>(() => _gender.Value);
dtos.Add<MaritalStatus>(() => _maritalStatus.Value);
dtos.Add<ResidentialStatus>(() => _residentalStatus.Value);
答案 1 :(得分:0)
感谢 mjwills here
找到了答案 public static IEnumerable<EnumDto> GetOptions<TEnum>() where TEnum : Enum
{
var type = typeof(TEnum);
switch (type)
{
case Type _ when type == typeof(Gender):
return _gender.Value;
default:
return _maritalStatus.Value;
}
}
但是,在查看了 Enigmativity 的答案后,我决定根据他更简洁的概念实施解决方案。