Posso confermare che questo è davvero un bug. La breve descrizione di cosa sta andando storto qui è la seguente: In CallBaz, c'è un singolo callsite che viene invocato tre volte. Quel callsite è un InvokeMember, perché è la migliore ipotesi che il compilatore possa fare data la sintassi C#, nonostante possa, in realtà, risolversi in un GetMember seguito da un Invoke.
Durante la seconda esecuzione del callsite, si tratta in effetti del binding che il runtime trova. E quindi produce un rinvio a un GetMember seguito da un richiamo. Il bug è che questo differimento non si limita propriamente al caso in cui l'argomento è di tipo anonimo. Pertanto, nella terza esecuzione, il differimento entra in azione e il GetMember tenta di collegarsi al Programma, che ovviamente fallisce.
Grazie per aver trovato questo. Come sottolinea Eric, siamo in una fase molto avanzata qui, e sta diventando difficile risolvere i problemi prima della spedizione. Ma vogliamo anche spedire il prodotto giusto. Farò il possibile per risolvere il problema, anche se forse non ci riuscirò. Se ti viene in mente qualcos'altro, non esitare a contattarmi. =)
UPDATE:
Anche se posso fare alcuna garanzia ciò che la versione finale di VS 2010 e C# 4 sarà simile a quando le navi, posso dire che sono riuscito a spingere questa correzione attraverso. Il build di escrow di rilascio di oggi si comporta correttamente per il tuo codice. Salvo alcune catastrofi, lo vedrete risolto al momento del rilascio. Grazie ancora. Ti devo una birra.
fonte
2010-02-22 16:47:48
Dov'è Eric Lippert: D –
Posso anche riprodurlo ... La prima chiamata a CallBaz (a) funziona correttamente, la seconda chiamata fallisce. Sembra davvero un bug, e uno serio ... –
Interessante.Ho lasciato cadere una e-mail in un elenco appropriato - si spera che prenda presto l'attenzione. –