存储对象的引用

时间:2011-07-08 07:26:10

标签: c#-4.0 delegates lambda

我不知道这是否可行,所以这是在黑暗中拍摄的。

...总之

考虑使用以下模型:

    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

如上所述,我不知道这样的事情是否可行,但我希望朝着正确的方向努力。

所需的功能:我想告诉命令在我有一个具体对象之前将结果放在哪里。

提前致谢

3 个答案:

答案 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)