如何通过反射获取类型的所有常量?

如何使用反射获取任何类型的所有常量?

回答:

虽然这是一个旧代码:

private FieldInfo[] GetConstants(System.Type type)

{

ArrayList constants = new ArrayList();

FieldInfo[] fieldInfos = type.GetFields(

// Gets all public and static fields

BindingFlags.Public | BindingFlags.Static |

// This tells it to get the fields from all base types as well

BindingFlags.FlattenHierarchy);

// Go through the list and only pick out the constants

foreach(FieldInfo fi in fieldInfos)

// IsLiteral determines if its value is written at

// compile time and not changeable

// IsInitOnly determines if the field can be set

// in the body of the constructor

// for C# a field which is readonly keyword would have both true

// but a const field would have only IsLiteral equal to true

if(fi.IsLiteral && !fi.IsInitOnly)

constants.Add(fi);

// Return an array of FieldInfos

return (FieldInfo[])constants.ToArray(typeof(FieldInfo));

}

资源

您可以使用泛型和LINQ轻松将其转换为更清晰的代码:

private List<FieldInfo> GetConstants(Type type)

{

FieldInfo[] fieldInfos = type.GetFields(BindingFlags.Public |

BindingFlags.Static | BindingFlags.FlattenHierarchy);

return fieldInfos.Where(fi => fi.IsLiteral && !fi.IsInitOnly).ToList();

}

或一行:

type.GetFields(BindingFlags.Public | BindingFlags.Static |

BindingFlags.FlattenHierarchy)

.Where(fi => fi.IsLiteral && !fi.IsInitOnly).ToList();

以上是 如何通过反射获取类型的所有常量? 的全部内容, 来源链接: utcz.com/qa/401906.html

回到顶部