Вы можете использовать Func<T, TResult>
общий делегат. (См. MSDN )
Func<MyType, ReturnType> func = (db) => { return new MyType(); }
Также есть полезные универсальные делегаты, которые рассматривают возвращаемое значение:
Converter<TInput, TOutput>
( MSDN )
Predicate<TInput>
- всегда возвращать bool ( MSDN )
Метод:
public MyType SimpleUsing.DoUsing<MyType>(Func<TInput, MyType> myTypeFactory)
Общий делегат:
Func<InputArgumentType, MyType> createInstance = db => return new MyType();
Выполнить:
MyType myTypeInstance = SimpleUsing.DoUsing(
createInstance(new InputArgumentType()));
ИЛИ явно:
MyType myTypeInstance = SimpleUsing.DoUsing(db => return new MyType());
Вы также можете воспользоваться тем фактом, что лямбда- или анонимный метод может закрывать переменные в своей охватывающей области.
MyType result; SimpleUsing.DoUsing(db => { result = db.SomeQuery(); //whatever returns the MyType result }); //do something with result
источник
Используйте,
Func<T>
а неAction<T>
.Action<T>
действует как метод void с параметром типа T, аFunc<T>
работает как функция без параметров и возвращает объект типа T.Если вы хотите передать параметры своей функции, используйте
Func<TParameter1, TParameter2, ..., TReturn>
.источник