从名字中获取Enum。这可能吗?

时间:2013-10-30 22:13:54

标签: c#

我有枚举:

public enum Colors { Yellow, Red }

然后我有一个字符串:

String enumName = "Colors";

是否可以从enumName获取枚举实例?类似的东西:

Enum colors = // get enum with name "Colors".

谢谢你, 米格尔

3 个答案:

答案 0 :(得分:1)

你正在寻找这样的东西吗?

using System;
using System.Linq;

namespace Stuff
{
    class Program
    {
        static void Main(string[] args)
        {
            string enumName = "Colors";
            string value = "Red";


            var loadedPublicTypes = AppDomain.CurrentDomain.GetAssemblies().SelectMany(x => x.GetExportedTypes());
            var possibleEnums = loadedPublicTypes.Where(x => x.IsEnum && x.Name == enumName);

            foreach (var e in possibleEnums)
            {
                Console.WriteLine("{0} is{1} a member of {2}", value, Enum.GetNames(e).Contains(value) ? "" : " not", e.FullName);
            }

        }


    }
    public enum Colors
    {
        Red,
        Yellow
    }
}

答案 1 :(得分:0)

您可以使用动态类型并按名称查找变量,但您必须拥有要包含在搜索中的所有枚举的实例。

查看以下帖子:Getting variable by name in C#

答案 2 :(得分:0)

您需要枚举类型的全名(例如System.Drawing.KnownColor, System.DrawingMicrosoft.MediaCenter.UI.Colors, Microsoft.MediaCenter.UI)。

完成此操作后,您可以使用反射创建相应枚举的实例。