using System; public class DemoAction { private Action justAnAction; private Action AsAction() { var name = typeof(T).Name; return v => Console.WriteLine(name); } private void ContrivedMethod() { var willTakeString = AsAction(); willTakeString("Hello world"); // outputs: String //type safety - squiggly willTakeString("1"); } Action takesString; // and does stuff with it Action takesIntAndString; // and does stuff with it Action takesAnyObject; Action takesMaximum; // I've never used so many - so don't worry }