c# - 如何从 Action() 返回值?

标签 c# .net linq

关于这个问题的答案Passing DataContext into Action() , 如何从 action(db) 返回一个值?

SimpleUsing.DoUsing(db => { 
// do whatever with db 
}); 

应该更像是:

MyType myType = SimpleUsing.DoUsing<MyType>(db => { 
// do whatever with db.  query buit using db returns MyType.
}); 

最佳答案

您可以使用 Func<T, TResult> 通用委托(delegate)。 (参见 MSDN )

Func<MyType, ReturnType> func = (db) => { return new MyType(); }

还有一些有用的通用委托(delegate)考虑了返回值:

  • Converter<TInput, TOutput> ( MSDN )
  • Predicate<TInput> - 总是返回 bool ( MSDN )

方法:

public MyType SimpleUsing.DoUsing<MyType>(Func<TInput, MyType> myTypeFactory)

通用委托(delegate):

Func<InputArgumentType, MyType> createInstance = db => return new MyType();

执行:

MyType myTypeInstance = SimpleUsing.DoUsing(
                            createInstance(new InputArgumentType()));

或明确地:

MyType myTypeInstance = SimpleUsing.DoUsing(db => return new MyType());

关于c# - 如何从 Action() 返回值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8099631/

相关文章:

c# - ChannelFactory 引发的 WCF 异常

c# - 将当前程序集加载到不同的AppDomain中

c# - 使用 Linq 和 Lambda 包含默认值

c# - XML Writer 将结果存储到字符串

Linq to Objects - 在列表中搜索的位置

c# - 单元测试和多个异步任务

c# - 在运行其余方法之前更新 UI

c# - 我们如何将自定义 UserControl 关闭为对话框?

.net - 为什么我们需要 SDK 和 .NET Framework?

c# - 将 ActiveDirectoryMembershipProvider 与 SqlMembershipProvider 一起使用