【发布时间】:2017-12-19 18:37:59
【问题描述】:
我有一个用于枚举值的StringValue 属性,因此我可以为每个值附加说明:
public class StringValueAttribute : Attribute
{
public string Value { get; private set; }
public StringValueAttribute(string value)
{
Value = value;
}
}
这就是我使用它的方式:
enum Group
{
[StringValue("Computer Science")]
ComputerScience,
[StringValue("Software Engineering")]
SoftwareEngineering,
// ... additional values follow.
}
我有一个方法可以在给定枚举值的情况下检索StringValue:
public static string GetStringValue(Enum value)
{
Type type = value.GetType();
FieldInfo fieldInfo = type.GetField(type.ToString());
StringValueAttribute[] attributes = fieldInfo.GetCustomAttributes(typeof(StringValueAttribute), false) as StringValueAttribute[];
string stringValue = null;
if (attributes.Length > 0)
{
stringValue = attributes[0].Value;
}
return stringValue;
}
我想要另一种方法来获取枚举(枚举本身,而不是值)并使用GetStringValue 方法检索IEnumerable。我不确定如何做到这一点。这样的方法怎么可能是这样的?
编辑:这个问题不是 How to get C# Enum description from value? 的重复问题。我知道如何获取枚举属性值,实际上我在问题中有一个方法可以做到这一点。我的问题是如何枚举枚举中的所有属性。
【问题讨论】:
-
你的意思是你想要一个泛型方法
GetStringValues<TEnum>()? -
您可以使用现有的
DescriptionAttribute代替您自己的自定义属性。对于枚举,Enum.GetValues(typeof(EnumType)).Cast<EnumType>().Select(/*call your method*/) -
另外,错字:
FieldInfo fieldInfo = type.GetField(value.ToString());-- 你传递的是type.ToString(),而不是value.ToString() -
@Sipo 这对我有用。 dbc 刚刚发布了我将要建议的解决方案,所以我节省了一些打字时间,只是对他投了赞成票。
-
@Sipo 只是元数据,它经常用于枚举值。它不会造成任何伤害。当然,出于同样的原因,自己编写也没有什么坏处。