public static void Main()
Program p = new Program();
Type[] types = Assembly.GetExecutingAssembly().GetTypes();
Type TEnum = types.Where(d => d.Name == "TEnum").FirstOrDefault();
var values = TEnum.GetEnumValues();
var error = new object ();
foreach (var value in values)
if (value.ToString() == "Test2")
var program = Assembly.GetExecutingAssembly().GetTypes().First(d => d.Name == "Program");
foreach (var method in program.GetMethods())
if (method.Name == "TestMethod")
method.Invoke(null, new object[2]
public static void TestMethod(string a, ref TEnum b)
Console.WriteLine("test");