How to get enum Type by specifying its name in String

17,856

Solution 1

To search all loaded assemblies in the current AppDomain for a given enum -- without having the fully qualified assembly name -- you can do:

    public static Type GetEnumType(string enumName)
    {
        foreach (var assembly in AppDomain.CurrentDomain.GetAssemblies())
        {
            var type = assembly.GetType(enumName);
            if (type == null)
                continue;
            if (type.IsEnum)
                return type;
        }
        return null;
    }

For instance (picking a semi-random enum which is not in my assembly):

var type1 = Type.GetType("System.Xml.Linq.LoadOptions") // Returns null.
var type2 = GetEnumType("System.Xml.Linq.LoadOptions") // Returns successfully.

You name should still include the namespace.

Solution 2

A LINQ-inspired answer:

public static Type GetEnumType(string name)
{
  return 
   (from assembly in AppDomain.CurrentDomain.GetAssemblies()
    let type = assembly.GetType(name)
    where type != null
       && type.IsEnum
    select type).FirstOrDefault();
}

The reason is that you need to go through all loaded assemblies, not only the current assembly.

Solution 3

This works great for me.

Type myType1 = Type.GetType("BusinessRule.SalaryCriteria");

enter image description here

I tried it without "EnumDisplayName" attribute.

Share:
17,856
Ehsan Sajjad
Author by

Ehsan Sajjad

Available as Mentor at hack.hands() Some Achievements 5th Top Contributor from Pakistan Top User in asp.net mvc from Pakistan 4th Top User in C# and asp.net from Pakistan 5th Top User in jquery from Pakistan Blog Email : [email protected] #SOreadytohelp

Updated on June 05, 2022

Comments

  • Ehsan Sajjad
    Ehsan Sajjad almost 2 years

    Suppose i have this Enum:

    namespace BusinessRule
    {
        public enum SalaryCriteria : int
            {
                [EnumDisplayName(DisplayName = "Per Month")]
                Per_Month = 1,
                [EnumDisplayName(DisplayName = "Per Year")]
                Per_Year = 2,
                [EnumDisplayName(DisplayName = "Per Week")]
                Per_Week = 3
            }
    }
    

    I have its name in a string variable like :

    string EnumAtt = "SalaryCriteria";
    

    i am trying to check if this Enum is defined by this name, and if defined i want to get its instance.i have tried like this, but type is returning null:

    string EnumAtt = "SalaryCriteria";
    Type myType1 = Type.GetType(EnumAtt);
    

    i have also tried this:

    string EnumAtt = "BusinessRule.SalaryCriteria";
    Type myType1 = Type.GetType(EnumAtt);
    

    any idea how i can achieve this.