Você pode usar Func<T, TResult>
delegado genérico. (Veja MSDN )
Func<MyType, ReturnType> func = (db) => { return new MyType(); }
Além disso, existem delegados genéricos úteis que consideram um valor de retorno:
Converter<TInput, TOutput>
( MSDN )
Predicate<TInput>
- sempre retorna bool ( MSDN )
Método:
public MyType SimpleUsing.DoUsing<MyType>(Func<TInput, MyType> myTypeFactory)
Delegado genérico:
Func<InputArgumentType, MyType> createInstance = db => return new MyType();
Executar:
MyType myTypeInstance = SimpleUsing.DoUsing(
createInstance(new InputArgumentType()));
OU explicitamente:
MyType myTypeInstance = SimpleUsing.DoUsing(db => return new MyType());
Você também pode tirar vantagem do fato de que um método lambda ou anônimo pode fechar as variáveis em seu escopo envolvente.
fonte
Use em
Func<T>
vez deAction<T>
.Action<T>
atua como um método void com parâmetro do tipo T, enquantoFunc<T>
funciona como uma função sem parâmetros e que retorna um objeto do tipo T.Se você deseja dar parâmetros à sua função, use
Func<TParameter1, TParameter2, ..., TReturn>
.fonte