簡體   English   中英

在特定名稱空間C#中打印枚舉列表

[英]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()方法。

可以使用LINQReflection課程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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM