Угловой случай использования лямбда-выражения в базовом конструкторе

В платформе, которую мы строим, нам нужен следующий шаблон:

public class BaseRenderer
{
    Func renderer;
    public BaseRenderer(Func renderer)
    {
        this.renderer = renderer;
    }

    public string Render()
    {
        return renderer();
    }
}

public class NameRenderer : BaseRenderer
{
    public string Name{ get; set; }

     public NameRenderer ()
        : base(() =>this.Name)
     {}
}

Как видите, мы создаем лямбду при вызове базового конструктора.

public class Program
{
    public static void Main()
    {
        Console.WriteLine(new NameRenderer(){Name = "Foo"}.Render());
    }
}

Как ни странно, при попытке фактически использовать лямбда-выражение оно выдает NullReferenceException (консольное приложение) или какое-либо исключение ExecutionEngineExceptionException (веб-приложение на IIS).

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

не должен»это исключение в "время захвата " вместо "время исполнения"? Это поведение задокументировано?

Я могу изменить код по-другому, но я думаю, что это стоит комментариев.

Ответы на вопрос(5)

Ваш ответ на вопрос