2011-07-08 144 views
0

我不知道这是否可能,因此这是在黑暗中拍摄的。将对象的引用存储为

总之...

考虑具有以下型号:

Class Model 
    { 
     public List<string> TheList = null; 
    } 

列表设置为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

解决了它,但不能发布的答案,直到8小时后,因为我是一个新手...:D –

回答

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

你可能会想要在那里RegisterInDataExecute之前调用办案错误,但你的想法。

1

您只需延迟调用传递给RegisterInData的委托,并在Execute处调用它(我猜)。

+0

RegisterInData的签名是什么?我偷看了linqs在哪里扩展。 public void SetReference (Func predicate)。但我得到一个类型不能被用法推断。 –

+0

@AnkMannen:看到Domenic的回答。 – leppie

相关问题