using System.Collections.Generic; class Test { delegate T Creator (); static bool TryAction (Creator creator, out T output) { output = default (T); return false; } static bool Func1 (IList list, bool arg, out T value) where T : new () { return TryAction (delegate { return Item (list); }, out value); } public static T Item (IList list) { return GetSingleItem (list); } public static T GetSingleItem (IList list) { return default (T); } public static void Main () { Test value; Func1 (new List (), false, out value); } }