首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何从Action()中返回值?

如何从Action()中返回值?
EN

Stack Overflow用户
提问于 2011-11-12 04:35:35
回答 5查看 145.1K关注 0票数 107

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

代码语言:javascript
复制
SimpleUsing.DoUsing(db => { 
// do whatever with db 
}); 

应该更像这样:

代码语言:javascript
复制
MyType myType = SimpleUsing.DoUsing<MyType>(db => { 
// do whatever with db.  query buit using db returns MyType.
}); 
EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2011-11-12 04:53:09

你的静态方法应该是:

代码语言:javascript
复制
public static class SimpleUsing
{
    public static void DoUsing(Action<MyDataContext> action)
    {
        using (MyDataContext db = new MyDataContext())
           action(db);
    }
}

至:

代码语言:javascript
复制
public static class SimpleUsing
{
    public static TResult DoUsing<TResult>(Func<MyDataContext, TResult> action)
    {
        using (MyDataContext db = new MyDataContext())
           return action(db);
    }
}

这个答案来自评论,所以我可以提供代码。有关完整的详细信息,请参阅下面@sll的答案。

票数 113
EN

Stack Overflow用户

发布于 2011-11-12 04:52:15

您还可以利用lambda或匿名方法可以关闭其封闭作用域中的变量这一事实。

代码语言:javascript
复制
MyType result;

SimpleUsing.DoUsing(db => 
{
  result = db.SomeQuery(); //whatever returns the MyType result
}); 

//do something with result
票数 15
EN

Stack Overflow用户

发布于 2019-06-11 02:35:03

使用Func而不是Action

Action的作用类似于带有T类型参数的空方法,而Func的作用类似于没有参数的函数,它返回T类型的对象。

如果您希望为函数提供参数,请使用Func<TParameter1, TParameter2, ..., TReturn>

票数 14
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8099631

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档