我有一个用于查找协调字符串值的枚举。其中一个枚举中有一个空格,因此我尝试使用description属性来查找该值。在找到DescriptionAttribute后,我无法回到公共类。
public class Address
{
...blah...more class datatypes here...
public AddressType Type { get; set; }
...blah....
}
public enum AddressType
{
FRA = 0,
JAP = 1,
MEX = 2,
CAN = 3,
[Description("United States")]
UnitedStates = 4,
}
if (Address.Type.ToString() == "UnitedStates")
{
Adddress.Type = GetDescription(Address.Type);
}
private static AddressType GetDescription(AddressType addrType)
{
FieldInfo fi = addrType.GetType().GetField(addrType.ToString());
DescriptionAttribute[] attributes =
(DescriptionAttribute[])fi.GetCustomAttributes(
typeof(DescriptionAttribute), false);
return (attributes.Length > 0) ? attributes[0].Description : addrType.ToString();
}
在GetDescription方法中,如何将其强制转换回其公共类数据类型“AddressType”,它失败了,因为这里是一个字符串?
答案 0 :(得分:2)
我担心我不能100%确定您的要求,但以下方法会返回string
描述或提供的AddressType
的名称。
private static string GetDescription(AddressType addrType)
{
FieldInfo fi = addrType.GetType().GetField(addrType.ToString());
DescriptionAttribute[] attributes =
(DescriptionAttribute[])fi.GetCustomAttributes(typeof(DescriptionAttribute), false);
return (attributes.Length > 0) ? attributes[0].Description : addrType.ToString();
}
请注意返回类型string
。
答案 1 :(得分:0)
您无法直接将字符串转换为枚举。您需要编写一个转换器方法,该方法接受一个字符串并返回枚举。
简单示例,但您可以使用字典并使其成为自己的类。
//string values are case sensitive
private AddressType StringToEnum(string enumString)
{
AddressType returnValue;
switch (enumString)
{
case "United States":
returnValue = AddressType.UnitedStates;
break;
case "France":
returnValue = AddressType.FRA;
break;
case "Japan":
returnValue = AddressType.JAP;
break;
case "Mexico":
returnValue = AddressType.MEX;
break;
case "Canada":
returnValue = AddressType.CAN;
break;
default:
returnValue = AddressType.UnitedStates;
break;
}
return returnValue;
}
如果您希望将字符串转换为枚举,则需要执行此类操作。
答案 2 :(得分:0)
您可以使用辅助方法从sting中删除空格并找到正确的Enum
示例:
public T EnumFromString<T>(string value) where T : struct
{
string noSpace = value.Replace(" ", "");
if (Enum.GetNames(typeof(T)).Any(x => x.ToString().Equals(noSpace)))
{
return (T)Enum.Parse(typeof(T), noSpace);
}
return default(T);
}
用法:
public enum Test
{
UnitedStates,
NewZealand
}
Test MyEnum = EnumFromString<Test>("New Zealand"); // Returns 'NewZealand'