带变量的枚举铸造

时间:2017-01-27 19:30:02

标签: c# enums

我希望能得到一些帮助。我需要一个函数,它可以接受一个字符串,它是一个字典的键,一个必须被强制转换为枚举类型。

字典键将是与枚举对应的数字。我需要知道如何将int转换为enum变量的枚举。

这是我编写的函数。这可能比我的解释更清楚。

string GetEnum(string keyName, Enum enumType)
{
    var defaultOut = "";
    Model.Form.TryGetValue(keyName, out defaultOut);
    if(defaultOut != ""){
        return EnumDescriptionUtility.GetDescription((enumType)Convert.ToInt32(defaultOut));            
    }
    else{
        return defaultOut;    
    } 
}

之前我使用过大部分代码。之前的区别是enumType被硬编码为实际的枚举。我想将所有重复内容卸载到函数中。

感谢任何帮助。

3 个答案:

答案 0 :(得分:1)

我不是100%肯定我理解你的Q,但是如果我这样做,你想要给一个给定的枚举值?

这是我最近创建的一种扩展方法,用于将值解析为给定的枚举。这种情况下的值是枚举的字符串名称。

public static T ToEnum<T>(this string val) where T : struct
{
     T t;
     if (Enum.TryParse(val, out t))
          return t;
     return default(T);
}

你会像以下一样使用它:

public enum MyEnum{
  A = 1,
  B = 2,
  C = 3
}

public enum MyOtherEnum{
  D = 1,
  E = 2,
  F = 3
}


string str = "A";
MyEnum yourEnum = str.ToEnum<MyEnum>();

string str2 = "A";
MyOtherEnum yourOtherEnum = str.ToEnum<MyOtherEnum>();

答案 1 :(得分:0)

所以,如果我理解正确,你知道它们的枚举类型和整数值。你没有包含关于你的枚举的任何信息,所以我设置了一个简单的例子。

    public enum Letter
    {
        A,
        B,
        C
    }

    public enum Number
    {
        One,
        Two,
        Three
    }

因此,如果你知道类型和整数值,你可以得到这样的枚举:

    public static Enum GetEnum(Type type, int val)
    {
        Enum e = null;

        if (type == typeof(Letter))
        {
            e = (Letter)val;
        }
        else if (type == typeof(Number))
        {
            e = (Number)val;
        }

        return e;
    }

您需要检查其类型才能使用它。也许是这样的:

    public static string StringFromEnum(Enum e)
    {
        string result = null;

        if (e.GetType() == typeof(Letter))
        {
            result =  ((Letter)e).ToString();
        }
        else if (e.GetType() == typeof(Number))
        {
            result = ((Number)e).ToString();
        }

        return result;
    }

    public static void Main(string[] args)
    {
        int val1 = 2;
        Type type1 = typeof(Letter);
        int val2 = 0;
        Type type2 = typeof(Number);

        var result1 = GetEnum(type1, val1);
        var result2 = GetEnum(type2, val2);

        Console.WriteLine("result1 {0}", StringFromEnum(result1));
        Console.WriteLine("result2 {0}", StringFromEnum(result2));

        Console.ReadKey();
    }

答案 2 :(得分:0)

如果您只想获取表示给定类型和int的枚举名称的字符串,可以使用Enum.GetName()

执行以下操作
    public enum Letter
    {
        A,
        B,
        C
    }

    public enum Number
    {
        One,
        Two,
        Three
    }

    public static void Main(string[] args)
    {
        int val1 = 2;
        Type type1 = typeof(Letter);
        int val2 = 0;
        Type type2 = typeof(Number);

        var result1 = Enum.GetName(type1, val1);
        var result2 = Enum.GetName(type2, val2);

        Console.WriteLine("result1 {0}", result1);
        Console.WriteLine("result2 {0}", result2);

        Console.ReadKey();
    }

如果你想要实际的枚举,我认为你必须做一些类似于其他答案的事情。听起来你想使用Type变量进行强制转换:

Type type1 = typeof(Letter);
var result = (type1) val1;  // wrong

而且我认为你不能这样做。即使使用泛型,您也必须在某个时刻指定类型。