减少本地定义的字段数

时间:2011-08-25 16:45:35

标签: c# .net c#-4.0

我有一个类有许多方法遵循以下模式:

public void GetSomeData1(DataParameters[] parameters, Action responseHandler)
{
  _getSomeData1ResponseHandler = responseHandler;
  Transactions.GetSomeData1(SomeData1ResponseHandler, parameters);
}

private void SomeData1ResponseHandler(Response response)
{
  if (response != null)
  {
    CreateSomeData1(response.Data);
  }
}

public void CreateSomeData1(Data data)
{
  //Create the objects and then invoke the Action
  ...

  if(_getSomeData1ResponseHandler != null)          
  {
    _getSomeData1ResponseHandler();
  }
}

因此,一些外部类调用GetSomeData1并传入一个Action,应该在数据可用时调用它。 GetSomeData1存储响应Action并调用Transactions.GetSomeData1(异步调用)。完成异步调用后,将创建数据并调用Action中传递的原始数据。

问题是,对于我所拥有的每个不同的GetSomeData调用,我需要存储传入的Action,以便稍后可以引用它。有没有办法我能以某种方式将原始Action传递给最终方法(CreateSomeData1)而不存储它?

感谢。

1 个答案:

答案 0 :(得分:0)

您可以使用lambda表达式将数据作为捕获变量传递。不需要课程领域。

    public void GetSomeData1(DataParameters[] parameters, Action responseHandler)
    {
      Transactions.GetSomeData1(response => SomeData1ResponseHandler(response, responseHandler), parameters);
    }

    private void SomeData1ResponseHandler(Response response, Action responseHandler)
    {
      if (response != null)
      {
        CreateSomeData1(response.Data, responseHandler);
      }
    }

    public void CreateSomeData1(Data data, Action responseHandler)
    {
      //Create the objects and then invoke the Action
      ...

      if(responseHandler != null)          
      {
        responseHandler();
      }
    }

在内部,编译器将创建用于保存数据的类和字段,但您编写的代码更清晰,更易于维护。