using System;
using System.Linq;
public class Test
{
public static void Main()
{
new Test().Run();
}
public void Run()
{
//type you need to create generic version with
var type = GetType().Assembly //assumes it is located in current assembly
.GetTypes()
.Single(t => t.Name == "MyType");
//creating a closed generic method
var method = GetType().GetMethod("Query")
.GetGenericMethodDefinition()
.MakeGenericMethod(type);
//calling it on this object
method.Invoke(this, null); //will print "Called Query with type: MyType"
}
public void Query<T>()
{
Console.WriteLine("Called Query with type: {0}", typeof(T).Name);
}
}
public class MyType { }
dXNpbmcgU3lzdGVtOwp1c2luZyBTeXN0ZW0uTGlucTsKCnB1YmxpYyBjbGFzcyBUZXN0CnsKCXB1YmxpYyBzdGF0aWMgdm9pZCBNYWluKCkKCXsKCQluZXcgVGVzdCgpLlJ1bigpOwoJfQoJCglwdWJsaWMgdm9pZCBSdW4oKQoJewoJCS8vdHlwZSB5b3UgbmVlZCB0byBjcmVhdGUgZ2VuZXJpYyB2ZXJzaW9uIHdpdGgKCQl2YXIgdHlwZSA9IEdldFR5cGUoKS5Bc3NlbWJseSAvL2Fzc3VtZXMgaXQgaXMgbG9jYXRlZCBpbiBjdXJyZW50IGFzc2VtYmx5CgkJICAgICAgICAgICAgICAgICAgICAuR2V0VHlwZXMoKQoJCSAgICAgICAgICAgICAgICAgICAgLlNpbmdsZSh0ID0+IHQuTmFtZSA9PSAiTXlUeXBlIik7CgkJCgkJLy9jcmVhdGluZyBhIGNsb3NlZCBnZW5lcmljIG1ldGhvZAoJCXZhciBtZXRob2QgPSBHZXRUeXBlKCkuR2V0TWV0aG9kKCJRdWVyeSIpCgkJICAgICAgICAgICAgICAgICAgICAgIC5HZXRHZW5lcmljTWV0aG9kRGVmaW5pdGlvbigpCgkJICAgICAgICAgICAgICAgICAgICAgIC5NYWtlR2VuZXJpY01ldGhvZCh0eXBlKTsKCQkKCQkvL2NhbGxpbmcgaXQgb24gdGhpcyBvYmplY3QKCQltZXRob2QuSW52b2tlKHRoaXMsIG51bGwpOyAvL3dpbGwgcHJpbnQgIkNhbGxlZCBRdWVyeSB3aXRoIHR5cGU6IE15VHlwZSIKCX0KCQoJcHVibGljIHZvaWQgUXVlcnk8VD4oKQoJewoJICAgIENvbnNvbGUuV3JpdGVMaW5lKCJDYWxsZWQgUXVlcnkgd2l0aCB0eXBlOiB7MH0iLCB0eXBlb2YoVCkuTmFtZSk7Cgl9Cn0KcHVibGljIGNsYXNzIE15VHlwZSB7ICB9