我编写了一个将int转换为Enum String的泛型方法,收到错误。请帮助Thanx。
public static string GetStringEquiValentOFEnumFromString<T>(int enumVal)
where T : struct
{
if(Enum.IsDefined(typeof(T),enumVal))
{
return ((T)enumVal).ToString(); ///Error: Cannot convert type 'int' to 'T'
}
return null;
}
答案 0 :(得分:2)
我认为你可以使用Enum.ToObject
:
public static string GetStringEquiValentOFEnumFromString<T>(int enumVal)
where T : struct
{
if (Enum.IsDefined(typeof(T), enumVal))
{
return Enum.ToObject(typeof (T), enumVal).ToString();
}
}
http://msdn.microsoft.com/en-us/library/system.enum.toobject.aspx
答案 1 :(得分:0)
您看到此错误,因为泛型类型参数不能限制为C#中的enum
类型。由于您的约束只表示它必须是值类型,因此编译器无法保证enumVal
可以转换为T
并且会产生编译时错误。
要解决此问题,您可以在函数中明确定义枚举类型:
public static string GetStringFromValue(this MyEnum enum, int val) {
if (Enum.IsDefined(typeof(MyEnum), val)) {
return ((MyEnum) val).ToString();
}
return null;
}
或者您可以使用类似于Jon Skeet的UnconstrainedMelody库,它在字节码级别重写您的代码以强制执行enum
约束(可从另一个程序集调用)。
答案 2 :(得分:0)
这应该有效:
public static string GetStringEquiValentOFEnumFromString<T>(int enumVal)
where T : struct
{
if(Enum.IsDefined(typeof(T),enumVal))
{
return ((T)(object)enumVal).ToString();
}
return null;
}
答案 3 :(得分:0)
public static class StringEnum {
public static string GetStringValue(Enum value)
{
string output = null;
Type type = value.GetType();
FieldInfo fi = type.GetField(value.ToString());
StringValue[] attr = fi.GetCustomAttributes(typeof(StringValue), false) as StringValue[];
if (attr.Length > 0)
{
output = attr[0].Value;
}
return output;
}
}
StringEnum是一个具有(GetStringValue)方法来获取字符串值的类。
public enum CampaignRequestType {[StringValue(“None”)] None = 0,[StringValue(“Pharmacy Cards”)] Pharmacy_Cards = 1,[StringValue(“Prospect Campaign”)] Prospect_Campaign = 2,[StringValue(“Tradeshow” /广告“)] Tradeshow_Advertising = 3}
它是一个枚举...
string item = StringEnum.GetStringValue((Enumeration.CampaignRequestType)updateRequestStatus.RequestType_Code);
这里(Enumeration.CampaignRequestType)是我的枚举,updateRequestStatus.RequestType_Code是数据库字段int类型
我将int值转换为枚举类型