【问题标题】:Passing DataContext into Action()将 DataContext 传递给 Action()
【发布时间】:2011-11-12 05:41:19
【问题描述】:

而不是做:

 using(MyDataContext db = new MyDataContext())
 {
   //do something
 }

我想使用 Action()

public static class SimpleUsing
{
  public static void DoUsing(Action action)
  {
    using(MyDataContext db = new MyDataContext())
    {
      //do something
    }
  }
}

将用作

SimpleUsing.DoUsing(() =>
{
   //but how to get DataContext variable?
}

主要问题是如何访问“db”变量以使用 DataContext?

【问题讨论】:

    标签: c# .net linq


    【解决方案1】:

    泛型类型Action<T1>Action<T1, T2> 等定义了一个接受一些参数的委托。所以你可以这样写:

    public static class SimpleUsing
    {
        public static void DoUsing(Action<MyDataContext> action)
        {
            using (MyDataContext db = new MyDataContext())
               action(db);
        }
    
        public static T DoUsing(Func<MyDataContext, T> fn)
        {
            using (MyDataContext db = new MyDataContext())
               return fn(db);
        }
    }
    
    // ...
    
    SimpleUsing.DoUsing(db => {
        // do whatever with db
    });
    
    var result = SimpleUsing.DoUsing(db => {
        return 42; // uses Func overload, result will be 42
    });
    

    【讨论】:

    • 优秀。谢谢。你知道我如何能够从中返回一个类型吗?这使得 DoUsing 成为一种通用方法(返回一些 T)。
    • 我相信你必须使用 Func 来返回一个值。
    • @TGnat,你知道那是什么样的吗?它必须停止运行并传递回方法。
    猜你喜欢
    • 2012-03-21
    • 1970-01-01
    • 2019-05-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-18
    • 2014-09-09
    相关资源
    最近更新 更多