减少本地定义字段的数量
本文关键字:字段 定义 | 更新日期: 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();
}
}
在内部,编译器将创建类和字段来保存数据,但是您编写的代码更干净,更易于维护。