How to get enum Type by specifying its name in String
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");
I tried it without "EnumDisplayName" attribute.
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, 2022Comments
-
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 returningnull
: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.