如何从assambly获取枚举值? [英] How to get enums values from assambly?

查看:76
本文介绍了如何从assambly获取枚举值?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个下面提到的枚举列表。

  public   enum  AccountCategory 
{
[EnumMember]
System_Owner = 2
[EnumMember ]
System_Account = 3
[EnumMember]
客户= 4
[EnumMember]
供应商= 5
}
public 枚举 ProductStatus
{

[EnumMember]
_Any = -1,
[ EnumMember]
Unknown = 0
[EnumMember]
可用= 1
[EnumMember]
Unde_Offer = 2
[EnumMember]
保留= 3
[EnumMember]
不可用= 4
[EnumMember]
Price_Reduction = 5
[EnumMember]
Guide_Price = 6
}





当用户选择枚举值时,页面加载仅在下拉列表中显示枚举名称显示在另一个下拉列表中



我尝试过:



< pre lang =c#> public ActionResult Index
{
List< SelectList> list = new List< SelectList>();

var references = Assembly.GetExecutingAssembly()。GetTypes()。Where(t = > ; t.IsEnum&& t.IsPublic).OrderBy(t = > t.Name);

List< SelectListItem> items = references.Select(r = >
new SelectListItem()
{
Value = r.Name,
Text = r.Name
})。ToList();
ViewBag.Enums = items;
return View();
}

public JsonResult LoadEnumsValue( string EnumName)
{
List< SelectListItem> item = new List< SelectListItem>();
尝试
{
if (Enum!= null && Enum!=
{
var references = Assembly.GetExecutingAssembly()。GetTypes()。Where(t = > t.IsEnum&& t.IsPublic).OrderBy(t = > t.Name);
if (references.Any())
{
var EnumValue = references.Where(x = > x.Name.ToLower()。Equals(Enum.ToLower()));
if (EnumValue.Any())
{
item = EnumValue.Select(r = >
new SelectListItem()
{
Value = r.Name,
Text = r.Name
})。ToList();
}
}

}
}
catch (例外情况)
{


}
return Json(item);
}

解决方案

请参阅我关于该主题的文章。基本上,您只需要我的枚举系列中的前两篇文章。如果您有兴趣,可以阅读其余的内容;在本系列的所有文章中引用:

枚举类型不会枚举!解决.NET和语言限制

人类可读的枚举元数据



这个想法是:你可以从程序集元数据中获取所需的一切;并且这只够做一次,所以性能不会受到影响。



-SA


i have a list of enums like mention below.

public enum AccountCategory
   {
       [EnumMember]
       System_Owner = 2,
       [EnumMember]
       System_Account = 3,
       [EnumMember]
       Customer = 4,
       [EnumMember]
       Supplier = 5
   }
public enum ProductStatus
    {
        
        [EnumMember]
        _Any = -1,
        [EnumMember]
        Unknown = 0,
        [EnumMember]
        Available = 1,
        [EnumMember]
        Unde_Offer = 2,
         [EnumMember]
        Reserved = 3,
        [EnumMember]
        Unavailable = 4,
        [EnumMember]
        Price_Reduction = 5,
         [EnumMember]
        Guide_Price = 6
    }



when page load only show the Enum Name in the dropdown when user select the enum it value show in another dropdown list

What I have tried:

public ActionResult Index
        {
            List<SelectList> list = new List<SelectList>();

            var references = Assembly.GetExecutingAssembly().GetTypes().Where(t => t.IsEnum && t.IsPublic).OrderBy(t => t.Name);

            List<SelectListItem> items = references.Select(r =>
                new SelectListItem()
                {
                    Value = r.Name,
                    Text = r.Name
                }).ToList();
            ViewBag.Enums = items;
            return View();
        }

   public JsonResult LoadEnumsValue(string EnumName)
        {
            List<SelectListItem> item = new List<SelectListItem>();
            try
            {
                if (Enum != null && Enum != "")
                {
                     var references = Assembly.GetExecutingAssembly().GetTypes().Where(t => t.IsEnum && t.IsPublic).OrderBy(t => t.Name);
                    if (references.Any())
                    {
                        var EnumValue = references.Where(x => x.Name.ToLower().Equals(Enum.ToLower()));
                        if (EnumValue.Any())
                        {
                            item = EnumValue.Select(r =>
                            new SelectListItem()
                            {
                                Value = r.Name,
                                Text = r.Name
                            }).ToList();
                        }
                    }

                }
            }
            catch (Exception ex)
            {


            }
            return Json(item);
        }

解决方案

Please see my articles on the topic. Basically, you need only first two articles from my enumeration series. If you are interest, you can read the rest; the are referenced on all articles from this series:
Enumeration Types do not Enumerate! Working around .NET and Language Limitations,
Human-readable Enumeration Meta-data.

The idea is: you can fetch all you need from the assembly metadata; and it's enough to do it just once, so the performance won't suffer.

—SA


这篇关于如何从assambly获取枚举值?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆