C#通过字符串类型的枚举名称反射获得该枚举的所有值
时间: 2024-10-18 07:10:54 浏览: 31
在C#中,你可以使用反射API来获取枚举类型的所有值。首先,你需要定义一个字符串类型的枚举,例如:
```csharp
public enum MyStringEnum : string {
Value1 = "Value1",
Value2 = "Value2",
Value3 = "Value3"
}
```
然后,你可以使用`typeof()`函数获取枚举类型,并结合`GetFields()`方法获取所有字段(即枚举值),像这样:
```csharp
Type myEnumType = typeof(MyStringEnum);
FieldInfo[] fieldInfos = myEnumType.GetFields(BindingFlags.Public | BindingFlags.Static);
foreach (FieldInfo field in fieldInfos) {
object fieldValue = field.GetValue(null); // 获取枚举值
string valueName = field.Name; // 获取枚举名称
Console.WriteLine($"Name: {valueName}, Value: {fieldValue}");
}
```
这样,你就可以遍历并打印出枚举的所有值及其对应的名称了。请注意,`GetValue(null)`返回的是枚举的实际值,不是字符串形式。
相关问题
c#如何通过枚举名称(字符串)获得枚举所有值
在C#中,如果你想要通过枚举名称获取对应的枚举值,可以使用`Enum.Parse`或`Enum.TryParse`方法。这两个方法都属于System.Enum类,它们可以根据给定的字符串尝试找到相应的枚举成员。
例如,假设有一个名为`DayOfWeek`的枚举:
```csharp
public enum DayOfWeek
{
Monday,
Tuesday,
Wednesday,
Thursday,
Friday,
Saturday,
Sunday
}
```
你可以这样做来获取特定名称的枚举值:
```csharp
DayOfWeek dayByName = Enum.Parse<DayOfWeek>("Monday");
```
如果枚举名称存在,`dayByName`将包含`Monday`的枚举值;如果名称不存在,则会抛出`FormatException`。
如果你想避免异常,并检查转换是否成功,可以使用`TryParse`方法:
```csharp
if (Enum.TryParse<DayOfWeek>("Monday", out DayOfWeek day))
{
Console.WriteLine(day);
}
else
{
Console.WriteLine("Invalid day name.");
}
```
在这个例子中,如果"Monday"有效,`day`变量会被赋值,否则`day`将是默认的枚举值(对于`DayOfWeek`可能是`default(DayOfWeek)`)。
C#通过反射用枚举名称获取枚举的所有值
在C#中,反射是一种强大的工具,它允许你在运行时检查、操作程序集和类型的信息。如果你想要通过枚举名称获取其所有值,可以利用`Enum.Parse`方法配合`typeof(EnumType)`获取枚举类型,然后遍历该类型的成员。以下是一个示例:
```csharp
using System;
using System.Reflection;
public class EnumExample
{
public enum MyEnum
{
Value1,
Value2,
Value3
}
public static void GetValuesByReflection(string enumName)
{
Type enumType = typeof(MyEnum);
FieldInfo[] fields = enumType.GetFields(BindingFlags.Public | BindingFlags.Static);
foreach (FieldInfo field in fields)
{
if (field.Name == enumName) // 检查字段名是否匹配
{
int value = (int)field.GetValue(null); // 获取枚举值
Console.WriteLine($"{field.Name}: {value}");
}
}
}
public static void Main()
{
string enumNameToSearch = "Value2";
GetValuesByReflection(enumNameToSearch);
}
}
```
在这个例子中,`GetValuesByReflection`方法接受一个枚举名称,然后通过`FieldInfo`获取到枚举的每个值,并将其转换为整数。
阅读全文