我不知道这是否可行,所以这是在黑暗中拍摄的。
...总之
考虑使用以下模型:
Class Model
{
public List<string> TheList = null;
}
List故意设置为null。
var model = new Model();
command.RegisterInData( model => model.TheList ); // TheList is null at this point
model.TheList = new List<string>();
model.TheList.Add("A value here");
command.Execute(); // <-- Here I want to access the new list somehow
如上所述,我不知道这样的事情是否可行,但我希望朝着正确的方向努力。
所需的功能:我想告诉命令在我有一个具体对象之前将结果放在哪里。
提前致谢
答案 0 :(得分:3)
这看起来很可行。这是一个更简单的访问者的变体:
class Command
{
private Func<List<string>> listAccessor;
public void RegisterInData(Func<List<string>> listAccessor)
{
this.listAccessor = listAccessor;
}
public void Execute()
{
var list = this.listAccessor();
foreach (string s in list)
{
Console.Log(s);
}
}
}
// Elsewhere
var model = new Model();
command.RegisterInData(() => model.TheList);
model.TheList = new List<string>();
model.TheList.Add("A value here");
command.Execute();
对于RegisterInData
之前未调用Execute
的情况,您可能需要进行错误处理,但您明白了。
答案 1 :(得分:1)
您只需要延迟调用传递给RegisterInData
的代理人并在Execute
调用它(我猜)。
答案 2 :(得分:0)
Lazy可以在这里使用吗? http://msdn.microsoft.com/en-us/library/dd642331.aspx