c# – SelectList扩展方法的通用枚举

c# – SelectList扩展方法的通用枚举,第1张

概述我需要在我的项目中从任何枚举创建一个SelectList. 我有下面的代码,我从特定的枚举创建一个选择列表,但我想为任何枚举创建一个扩展方法.此示例检索每个Enum值上的DescriptionAttribute的值 var list = new SelectList( Enum.GetValues(typeof(eChargeType)) .Cast 我需要在我的项目中从任何枚举创建一个SelectList.

我有下面的代码,我从特定的枚举创建一个选择列表,但我想为任何枚举创建一个扩展方法.此示例检索每个Enum值上的DescriptionAttribute的值

var List = new SelectList(            Enum.GetValues(typeof(eChargeType))            .Cast<eChargeType>()            .Select(n => new                {                    ID = (int)n,label = n.ToString()                }),"ID","label",charge.type_ID);

参考this post,我该如何处理?

public static voID ToSelectList(this Enum e){    // code here}
解决方法 我认为你正在努力的是检索描述.我相信一旦你有那些你可以定义你的最终方法,给出你的确切结果.

首先,如果您定义了一个扩展方法,它将使用枚举的值,而不是枚举类型本身.我认为,为了便于使用,您希望在类型上调用方法(如静态方法).不幸的是,你不能定义那些.

你能做的是以下几点.首先定义一个方法来检索枚举值的描述​​,如果它有一个:

public static string GetDescription(this Enum value) {    string description = value.ToString();    FIEldInfo fIEldInfo = value.GetType().GetFIEld(description);    DescriptionAttribute[] attributes = (DescriptionAttribute[])fIEldInfo.GetCustomAttributes(typeof(DescriptionAttribute),false);    if (attributes != null && attributes.Length > 0) {        description = attributes[0].Description;    }    return description;}

接下来,定义一个获取枚举的所有值的方法,并使用前面的方法查找我们想要显示的值,并返回该列表.可以推断出泛型参数.

public static List<keyvaluePair<TEnum,string>> ToEnumDescriptionsList<TEnum>(this TEnum value) {    return Enum        .GetValues(typeof(TEnum))        .Cast<TEnum>()        .Select(x => new keyvaluePair<TEnum,string>(x,((Enum)((object)x)).GetDescription()))        .ToList();}

最后,一种无需直接调用它的方法.但是泛型参数不是可选的.

public static List<keyvaluePair<TEnum,string>> ToEnumDescriptionsList<TEnum>() {    return ToEnumDescriptionsList<TEnum>(default(TEnum));}

现在我们可以像这样使用它:

enum TestEnum {    [Description("My first value")]    Value1,Value2,[Description("Last one")]    Value99}var items = default(TestEnum).ToEnumDescriptionsList();// or: TestEnum.Value1.ToEnumDescriptionsList();// Alternative: EnumExtensions.ToEnumDescriptionsList<TestEnum>()foreach (var item in items) {    Console.Writeline("{0} - {1}",item.Key,item.Value);}Console.Readline();

哪个输出:

Value1 - My first valueValue2 - Value2Value99 - Last one
总结

以上是内存溢出为你收集整理的c# – SelectList扩展方法的通用枚举全部内容,希望文章能够帮你解决c# – SelectList扩展方法的通用枚举所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1247514.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-07
下一篇 2022-06-07

发表评论

登录后才能评论

评论列表(0条)

保存