Когда оцениваются свойства в замыканиях ?

Некоторые методы в нашей кодовой базе используют «MaybeObject», который может быть передан функциям, когда результат может быть известен, или может полагаться на внешний вызов веб-службы, который еще не был выполнен.Например, свойство ниже может иметь либо указанное известное значение, либо, если оно не указано и вызывается после завершения асинхронного вызова, оно вернет результат асинхронного вызова.

private string _internalString;
public string stringProp
{ 
    get
    {
        if (!string.IsNullOrEmpty(_internalString))
            return _internalString;
        return resultOfAsyncCallFromSomewhereElse;
    }

    set { _internalString = value; }
}

Очевидно, что попытка сослаться на свойство до завершения асинхронного вызова вызовет исключение нулевой ссылки, поэтому у нас также есть флаг для проверки доступности значения.

Вопрос в том, что в приведенном ниже коде создание лямбда-выражения будет пытаться и оценить stringProp (которое может еще не быть заполнено), или оценка будет отложена до тех пор, пока не будет вызвано результирующее действие (что приведет к быть после проверки завершения асинхронной операции)?

public Action ExampleMethod(MaybeObject maybe)
{
    return () => doSomethingWithString(maybe.stringProp);
}
7
задан sll 17 December 2011 в 13:15
поделиться