public abstract class Base
public enum EnumWorkflowJobType
public class Derived1 : Base
public static EnumWorkflowJobType ClassType { get { return EnumWorkflowJobType.Class1; } }
public class Derived2 : Base
public static EnumWorkflowJobType ClassType { get { return EnumWorkflowJobType.Class2; } }
public static void Main()
Console.WriteLine(FindClassByEnum(EnumWorkflowJobType.Class1).FullName);
Console.WriteLine(FindClassByEnum(EnumWorkflowJobType.Class2).FullName);
public static Type FindClassByEnum(EnumWorkflowJobType enumClassType)
foreach (var type in typeof(Base).Assembly.DefinedTypes)
if (!type.IsAbstract && !type.IsInterface && typeof(Base).IsAssignableFrom(type))
var propValue = (EnumWorkflowJobType) type.GetProperty("ClassType", System.Reflection.BindingFlags.Static | System.Reflection.BindingFlags.Public).GetValue(null);
if (propValue == enumClassType)