Я могу подтвердить, что это действительно ошибка. Краткое описание того, что идет не так, выглядит следующим образом: В CallBaz есть один сайт вызова, который вызывается три раза. Этот CallSite является InvokeMember, потому что это лучшее предположение, которое компилятор может сделать, учитывая синтаксис C #, несмотря на то, что в действительности он может преобразоваться в GetMember, за которым следует Invoke.
Во время второго выполнения места вызова это действительно привязка, которую находит среда выполнения. И поэтому он производит отсрочку для GetMember с последующим вызовом. Ошибка заключается в том, что эта отсрочка не ограничивается должным образом случаем, когда аргумент является анонимным типом. Таким образом, в третьем выполнении отсрочка запускается, и GetMember пытается привязать к Программе, что, конечно, не удается.
Спасибо, что нашли это. Как указывает Эрик, мы находимся здесь на очень поздней стадии, и нам становится все труднее решать проблемы перед отправкой. Но мы также хотим доставить правильный продукт. Я собираюсь сделать все возможное, чтобы решить эту проблему, хотя, возможно, мне это не удастся. Если вы придумали что-нибудь еще, пожалуйста, не стесняйтесь связаться со мной. =)
UPDATE:
Хотя я не могу гарантировать, как будет выглядеть финальная версия VS 2010 и C # 4, когда она выйдет, я могу сказать, что мне удалось продвинуть это исправление. Сегодняшняя релизная сборка ведет себя правильно для вашего кода. За исключением некоторой катастрофы, вы увидите, что это исправлено при выпуске. Еще раз спасибо. Я должен тебе пиво.