C# 打印特定命名空间C中的枚举列表#
有没有办法打印C#类库或命名空间中的所有枚举?我希望打印名称及其值 例如,如果我的命名空间如下所示:C# 打印特定命名空间C中的枚举列表#,c#,C#,有没有办法打印C#类库或命名空间中的所有枚举?我希望打印名称及其值 例如,如果我的命名空间如下所示: namespace MyCompany.SystemLib { public enum ItemStatus { None = 0, Active = 1, Inactive = 2 } public enum MyEnum { EnumVal1 = 1, EnumV
namespace MyCompany.SystemLib
{
public enum ItemStatus
{
None = 0,
Active = 1,
Inactive = 2
}
public enum MyEnum
{
EnumVal1 = 1,
EnumVal2 = 2,
EnumVal3 = 3,
}
}
我想把它们打印成下面的分隔符(到一个文本文件中),为清晰起见,这里不需要输出
ItemStatus,无=0,活动=1,非活动=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);
}
}
List allEnums=new List();
var allTypes=AppDomain.CurrentDomain.getAssemblys().SelectMany(assembly=>assembly.GetTypes());
foreach(所有类型中的类型)
{
if(type.Namespace==“MyCompany.SystemLib”&&type.IsEnum)
{
字符串enumLine=type.Name+“,”;
foreach(Enum.GetValues(类型)中的变量enumValue)
{
enumLine+=enumValue+“=”+((int)enumValue).ToString()+”,”;
}
添加(枚举行);
}
}
第一行遍历当前加载到内存中的所有程序集(因为名称空间可以分散在许多DLL和EXE中),并过滤掉正确名称空间中的程序集,即枚举。如果您愿意,可以将其简化为LINQ查询
内部循环遍历枚举的值,并使用GetName将字符串与值匹配。反射到rescue
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);
}
}
List allEnums=new List();
var allTypes=AppDomain.CurrentDomain.getAssemblys().SelectMany(assembly=>assembly.GetTypes());
foreach(所有类型中的类型)
{
if(type.Namespace==“MyCompany.SystemLib”&&type.IsEnum)
{
字符串enumLine=type.Name+“,”;
foreach(Enum.GetValues(类型)中的变量enumValue)
{
enumLine+=enumValue+“=”+((int)enumValue).ToString()+”,”;
}
添加(枚举行);
}
}
第一行遍历当前加载到内存中的所有程序集(因为名称空间可以分散在许多DLL和EXE中),并过滤掉正确名称空间中的程序集,即枚举。如果您愿意,可以将其简化为LINQ查询
内部循环遍历枚举的值,并使用GetName将字符串与值匹配。当然可以使用
LINQ
和反射来完成
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);
当然可以使用LINQ
和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);
请看一下.NET反射机制。这应该给您一个领先的开始。您可能正在寻找类System.Enum。它有GetValues和GetNames方法,这可能是您所需要的。要查找程序集中的所有枚举,您需要使用反射。您当然可以从给定程序集中获取枚举列表(假设权限正确,依此类推)。这是你的问题吗?或者你只是想了解GetValues和GetNames方法?这可能会对你有所帮助:我感谢大家的帮助。对于落选的选民来说,认真地问一个问题会让他们落选吗?请看一下.NET的反射机制。这应该给您一个领先的开始。您可能正在寻找类System.Enum。它有GetValues和GetNames方法,这可能是您所需要的。要查找程序集中的所有枚举,您需要使用反射。您当然可以从给定程序集中获取枚举列表(假设权限正确,依此类推)。这是你的问题吗?或者你只是想了解GetValues和GetNames方法?这可能会对你有所帮助:我感谢大家的帮助。对于落选的选民来说,认真地提问会获得落选票?它会打印ItemStatus,None=None,Active=Active,Inactive=Inactive。我正在尝试处理它。enumLine+=Enum.GetName(类型,enumValue)+“=”+((int)enumValue.ToString()+”,”;修复了它。在这种情况下,您根本不需要Enum.GetName.:)是的。取出GetName。它打印ItemStatus,None=None,Active=Active,Inactive=Inactive。我正在尝试处理它。enumLine+=Enum.GetName(类型,enumValue)+“=”+((int)enumValue.ToString()+”,”;修复了它。在这种情况下,您根本不需要Enum.GetName.:)是的。取出GetName。