public static class Program
public static void Main()
B x1 = typeof(A).ToEnum1<B>("Default");
B y1 = typeof(A).ToEnum1<B>("Two");
Console.WriteLine("Using tenum: {0}, {1}", x1, y1);
B x2 = typeof(A).ToEnum2<B>("Default");
B y2 = typeof(A).ToEnum2<B>("Two");
Console.WriteLine("Using typeof(TEnum): {0}, {1}", x2, y2);
enum A { Zero = 0, One = 1, Two = 2, Default = One }
enum B { Zero = 1, One = 2, Two = 4, Default = Two }
static TEnum ToEnum1<TEnum>(this Type tenum, string str, bool ignoreCase = false) => (TEnum)Enum.Parse(tenum, str, ignoreCase);
static TEnum ToEnum2<TEnum>(this Type tenum, string str, bool ignoreCase = false) => (TEnum)Enum.Parse(typeof(TEnum), str, ignoreCase);