减少本地定义字段的数量

本文关键字:字段 定义 | 更新日期: 2023-09-27 18:06:52

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

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,该Action应该在数据可用时调用。GetSomeData1存储响应Action并调用Transactions。GetSomeData1(一个异步调用)。一旦异步调用完成,就会创建数据,并调用Action中传递的原始数据。

问题是,对于我拥有的每个不同的GetSomeData调用,我需要将传递的内容存储在Action中,以便以后可以引用它。是否有一种方法,我可以以某种方式传递原始的动作到最后的方法(CreateSomeData1),而不存储它?

谢谢。

减少本地定义字段的数量

可以将数据作为带有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();
      }
    }

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