[英]Printing list of enums in a particular namespace C#
有沒有辦法打印C#類庫或命名空間中的所有枚舉? 我希望將名稱及其值打印出來。
例如,如果我具有以下名稱空間:
namespace MyCompany.SystemLib
{
public enum ItemStatus
{
None = 0,
Active = 1,
Inactive = 2
}
public enum MyEnum
{
EnumVal1 = 1,
EnumVal2 = 2,
EnumVal3 = 3,
}
}
我想將它們分隔如下(到文本文件),為清楚起見,此處給出的項目符號在輸出中不需要。
ItemStatus,None=0,Active=1,Inactive=1
MyEnum,EnumVal1=1,EnumVal2=2,EnumVal3
我不知道從哪里開始。 任何幫助表示贊賞。
反思救援!
List<string> allEnums = new List<string>();
var allTypes = AppDomain.CurrentDomain.GetAssemblies().SelectMany(assembly => assembly.GetTypes());
foreach (Type type in allTypes)
{
if (type.Namespace == "MyCompany.SystemLib" && type.IsEnum)
{
string enumLine = type.Name + ",";
foreach (var enumValue in Enum.GetValues(type))
{
enumLine += enumValue + "=" + ((int)enumValue).ToString() + ",";
}
allEnums.Add(enumLine);
}
}
第一行遍歷當前加載到內存中的所有程序集(因為命名空間可以分散在許多DLL和EXE上),並過濾掉正確的命名空間中的那些,即枚舉。 如果需要,可以將其簡化為LINQ查詢。
內部循環遍歷枚舉的值,並使用GetName將字符串與值匹配。
嘗試使用Enum.GetNames()
方法。
可以使用LINQ
和Reflection
課程Reflection
來完成。
var asm = Assembly.LoadFrom("path of the assembly");
var enums = asm.GetTypes().Where(x => x.IsEnum).ToList();
var result = enums
.Select(
x =>
string.Format("{0},{1}", x.Name,
string.Join(",",Enum.GetNames(x)
.Select(e => string.Format("{0}={1}", e, (int)Enum.Parse(x, e))))));
File.WriteAllLines("path", result);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.