using System; using System.Collections.Generic; class C { public static void Foo<TSource> (IEnumerable<TSource> a) { } public static void Foo<TCollection, TSource> (IEnumerable<TSource> a, Func<TSource, IEnumerable <TCollection>> b) { } public static void Foo<TCollection, TSource> (IEnumerable<TSource> a, Func<TSource, TCollection[], IEnumerable <TCollection>> b) { } public static void Foo<TCollection, TSource> (Func<TCollection[], IEnumerable <TSource>> b) { } public static void Main () { int[] a = new int [] { 1 }; Foo (a); Foo (a, (int i) => { return a; }); Foo (a, (int i, int[] b) => { return a; }); Foo ((int[] b) => { return a; }); } }