繁体   English   中英

从ENUM中获取字符串的通用方法(通过传递int值)

[英]Generic Method to get string from ENUM (by passing int Value)

我写了一个通用方法将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;  
    }

我认为您可以使用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

公共静态类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)方法来获取字符串值。

公共枚举CampaignRequestType {[StringValue(“ None”)]无= 0,[StringValue(“药房卡”)] Pharmacy_Cards = 1,[StringValue(“ Prospect Campaign”)] Prospect_Campaign = 2,[StringValue(“ Tradeshow / Advertising” )] Tradeshow_Advertising = 3}

它是一个枚举

字符串项目= StringEnum.GetStringValue((Enumeration.CampaignRequestType)updateRequestStatus.RequestType_Code);

这里(Enumeration.CampaignRequestType)是我的枚举,而updateRequestStatus.RequestType_Code是数据库字段int类型

我将int值转换为枚举类型

您会看到此错误,因为不能将通用类型参数限制为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约束(可从另一个程序集调用)。

这应该起作用:

public static string GetStringEquiValentOFEnumFromString<T>(int enumVal) 
    where T : struct 
{ 
    if(Enum.IsDefined(typeof(T),enumVal)) 
    { 
        return ((T)(object)enumVal).ToString();
    }           
    return null;   
} 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM