c# java枚举字符串 enum菜鸟 - 在C#中将int转换为枚举




11 Answers

从字符串:

YourEnum foo = (YourEnum) Enum.Parse(typeof(YourEnum), yourString);
// the foo.ToString().Contains(",") check is necessary for enumerations marked with an [Flags] attribute
if (!Enum.IsDefined(typeof(YourEnum), foo) && !foo.ToString().Contains(","))
  throw new InvalidOperationException($"{yourString} is not an underlying value of the YourEnum enumeration.")

来自int:

YourEnum foo = (YourEnum)yourInt;

更新:

从数字你也可以

YourEnum foo = (YourEnum)Enum.ToObject(typeof(YourEnum) , yourInt);

如何将int为C#中的enum




或者,使用扩展方法而不是单行:

public static T ToEnum<T>(this string enumString)
{
    return (T) Enum.Parse(typeof (T), enumString);
}

用法:

Color colorEnum = "Red".ToEnum<Color>();

要么

string color = "Red";
var colorEnum = color.ToEnum<Color>();



采用以下示例:

int one = 1;
MyEnum e = (MyEnum)one;



以下是Enums的一个很好的实用程序类

public static class EnumHelper
{
    public static int[] ToIntArray<T>(T[] value)
    {
        int[] result = new int[value.Length];
        for (int i = 0; i < value.Length; i++)
            result[i] = Convert.ToInt32(value[i]);
        return result;
    }

    public static T[] FromIntArray<T>(int[] value) 
    {
        T[] result = new T[value.Length];
        for (int i = 0; i < value.Length; i++)
            result[i] = (T)Enum.ToObject(typeof(T),value[i]);
        return result;
    }


    internal static T Parse<T>(string value, T defaultValue)
    {
        if (Enum.IsDefined(typeof(T), value))
            return (T) Enum.Parse(typeof (T), value);

        int num;
        if(int.TryParse(value,out num))
        {
            if (Enum.IsDefined(typeof(T), num))
                return (T)Enum.ToObject(typeof(T), num);
        }

        return defaultValue;
    }
}






有时你有一个MyEnum类型的对象。 喜欢

var MyEnumType = typeof(MyEnumType);

然后:

Enum.ToObject(typeof(MyEnum), 3)



要将字符串转换为ENUM或int转换为ENUM常量,我们需要使用Enum.Parse函数。 这是一个YouTube视频https://www.youtube.com/watch?v=4nhx4VwdRDk ,它实际上演示了字符串,同样适用于int。

代码如下所示,其中“red”是字符串,“MyColors”是具有颜色常数的颜色ENUM。

MyColors EnumColors = (MyColors)Enum.Parse(typeof(MyColors), "Red");



这将整数或字符串解析为目标枚举,在dot.NET 4.0中使用泛型,如上面的Tawani实用程序类中的部分匹配。 我用它来转换可能不完整的命令行开关变量。 由于枚举不能为null,因此您应该在逻辑上提供默认值。 它可以像这样调用:

var result = EnumParser<MyEnum>.Parse(valueToParse, MyEnum.FirstValue);

这是代码:

using System;

public class EnumParser<T> where T : struct
{
    public static T Parse(int toParse, T defaultVal)
    {
        return Parse(toParse + "", defaultVal);
    }
    public static T Parse(string toParse, T defaultVal) 
    {
        T enumVal = defaultVal;
        if (defaultVal is Enum && !String.IsNullOrEmpty(toParse))
        {
            int index;
            if (int.TryParse(toParse, out index))
            {
                Enum.TryParse(index + "", out enumVal);
            }
            else
            {
                if (!Enum.TryParse<T>(toParse + "", true, out enumVal))
                {
                    MatchPartialName(toParse, ref enumVal);
                }
            }
        }
        return enumVal;
    }

    public static void MatchPartialName(string toParse, ref T enumVal)
    {
        foreach (string member in enumVal.GetType().GetEnumNames())
        {
            if (member.ToLower().Contains(toParse.ToLower()))
            {
                if (Enum.TryParse<T>(member + "", out enumVal))
                {
                    break;
                }
            }
        }
    }
}

仅供参考:问题是有关整数的问题,没有人提到它也会在Enum.TryParse()中显式转换




以下是稍微好一点的扩展方法

public static string ToEnumString<TEnum>(this int enumValue)
        {
            var enumString = enumValue.ToString();
            if (Enum.IsDefined(typeof(TEnum), enumValue))
            {
                enumString = ((TEnum) Enum.ToObject(typeof (TEnum), enumValue)).ToString();
            }
            return enumString;
        }



Enum进行投射的不同方式

enum orientation : byte
{
 north = 1,
 south = 2,
 east = 3,
 west = 4
}

class Program
{
  static void Main(string[] args)
  {
    orientation myDirection = orientation.north;
    Console.WriteLine(“myDirection = {0}”, myDirection); //output myDirection =north
    Console.WriteLine((byte)myDirection); //output 1

    string strDir = Convert.ToString(myDirection);
        Console.WriteLine(strDir); //output north

    string myString = “north”; //to convert string to Enum
    myDirection = (orientation)Enum.Parse(typeof(orientation),myString);


 }
}



它可以帮助您将任何输入数据转换为用户所需的枚举 。 假设你有一个类似于下面的枚举,默认为int 。 请在枚举的第一个位置添加默认值。 当找不到与输入值匹配时,在helpers方法中使用哪个。

public enum FriendType  
{
    Default,
    Audio,
    Video,
    Image
}

public static class EnumHelper<T>
{
    public static T ConvertToEnum(dynamic value)
    {
        var result = default(T);
        var tempType = 0;

        //see Note below
        if (value != null &&
            int.TryParse(value.ToString(), out  tempType) && 
            Enum.IsDefined(typeof(T), tempType))
        {
            result = (T)Enum.ToObject(typeof(T), tempType); 
        }
        return result;
    }
}

注意:这里我尝试将值解析为int,因为枚举是默认的int如果你定义这样的枚举是字节类型。

public enum MediaType : byte
{
    Default,
    Audio,
    Video,
    Image
} 

您需要更改辅助方法的解析

int.TryParse(value.ToString(), out  tempType)

byte.TryParse(value.ToString(), out tempType)

我检查我的方法输入以下内容

EnumHelper<FriendType>.ConvertToEnum(null);
EnumHelper<FriendType>.ConvertToEnum("");
EnumHelper<FriendType>.ConvertToEnum("-1");
EnumHelper<FriendType>.ConvertToEnum("6");
EnumHelper<FriendType>.ConvertToEnum("");
EnumHelper<FriendType>.ConvertToEnum("2");
EnumHelper<FriendType>.ConvertToEnum(-1);
EnumHelper<FriendType>.ConvertToEnum(0);
EnumHelper<FriendType>.ConvertToEnum(1);
EnumHelper<FriendType>.ConvertToEnum(9);

对不起我的英语不好




Related