如何从assambly获取枚举值? [英] How to get enums values from 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屋!