using System.Collections.Generic;
public static void Main()
var list = new List<object>();
list.Add(new Generic<int, Func<string>>());
list.Add(new Generic<int, Func<int>>());
list.Add(new Generic<int, Func<string, string>>());
list.Add(new Generic<int, Func<int, int>>());
foreach (var item in list)
if (item is Generic<int, Func<int>>)
Console.WriteLine("Found a Generic<int, Func<int>>!");
if (item is Generic<int, Func<string>>)
Console.WriteLine("Found a Generic<int, Func<string>>!");
if (item is Generic<int, Func<string, string>>)
Console.WriteLine("Found a Generic<int, Func<string, string>>!");
if (item is Generic<int, Func<int, int>>)
Console.WriteLine("Found a Generic<int, Func<int, int>>!");
if (item is Generic<int, Func<object>>)
Console.WriteLine("Found a Generic<int, Func<object>>!");
if (item is Generic<int, Func<object, object>>)
Console.WriteLine("Found a Generic<int, Func<object, object>>!");
if (item.GetType().IsAssignableFrom(typeof(Generic<int, Func<object, object>>)))
Console.WriteLine("IsAssignableFrom typeof(Generic<int, Func<object, object>>!");
public class Generic<T1, T2> { }