Сокращение количества локально определенных полей - PullRequest
1 голос
/ 25 августа 2011

У меня есть класс, который имеет несколько методов, которые следуют приведенному ниже шаблону:

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 и передает действие, которое следует вызывать, когда данные доступны. GetSomeData1 сохраняет ответное действие и вызывает Transactions.GetSomeData1 (асинхронный вызов). После завершения этого асинхронного вызова создаются данные и вызывается оригинал, переданный в Action.

Дело в том, что для каждого отдельного вызова GetSomeData мне нужно сохранять переданное в действии, чтобы я мог ссылаться на него позже. Есть ли способ, которым я могу каким-то образом передать исходное действие в последний метод (CreateSomeData1), не сохраняя его?

Спасибо.

1 Ответ

0 голосов
/ 25 августа 2011

Вы можете передавать данные как захваченную переменную с лямбда-выражениями.Нет необходимости в полях классов.

    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();
      }
    }

Внутри компилятор создаст классы и поля для хранения данных, но код, который вы пишете, более чистый и его легче поддерживать.

...