Хранение ссылки на объект, который будет - PullRequest
0 голосов
/ 08 июля 2011

Я не знаю, возможно ли это вообще, так что это выстрел в темноте.

В любом случае ...

Рассмотрим следующую модель:

    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

Как уже говорилось, я не знаю, возможно ли что-либо подобное, но я бы хотел толкнуть в правильном направлении.

Требуемая функция: я хотел бы сообщить команде, куда поместить результат, прежде чем у меня будет конкретный объект.

Заранее спасибо

Ответы [ 3 ]

3 голосов
/ 08 июля 2011

Это кажется вполне выполнимым.Вот вариант с еще более простым средством доступа:

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 голос
/ 08 июля 2011

Вы просто должны отложить вызов делегата, переданного на RegisterInData, и вызвать его (я полагаю) на Execute.

0 голосов
/ 08 июля 2011

Может ли Lazy быть полезным здесь?http://msdn.microsoft.com/en-us/library/dd642331.aspx

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...