我有一个类有许多方法遵循以下模式:
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)而不存储它?
感谢。
答案 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();
}
}
在内部,编译器将创建用于保存数据的类和字段,但您编写的代码更清晰,更易于维护。