Utilizzando automapper, mi ha colpito un luogo in cui un argomento di nome avrebbe fatto in forma molto bene:Perché un albero di espressioni non può contenere una specifica argomento con nome?
.ForMember(s => s.MyProperty, opt => opt.MapFrom(s => BuildMyProperty(s, isAdvanced: false)))
Ma il compilatore zittirmi:
Un albero di espressione non può contenere una specifica argomento denominato
così ho dovuto tornare a:
.ForMember(s => s.MyProperty, opt => opt.MapFrom(s => BuildMyProperty(s, false)))
Qualcuno sa perché il compilatore non consente gli argomenti con nome in questa situazione?
Questo messaggio di errore che ritengo dovrebbe davvero essere documentato a questo effetto. In altre parole, la ricerca di msdn per la stringa esatta del messaggio di errore dovrebbe fornirci questo chiarimento. http://social.msdn.microsoft.com/Search/en-US?query=%22An%20expression%20tree%20may%20not%20contain%20a%20named%20argument%20specification%22&ac=8 – payo
Questo è eccellente - grazie Eric. Fino ad ora non avevo mai dato un'occhiata alle differenze tra 'Expression <...>' e 'Func <...>'. Quando si dice che (1) sarebbe costoso, tuttavia, ciò significa in termini di costi di sviluppo o che sarebbe computazionalmente costoso? –
@BrandonLinton: Sarebbe costoso sviluppare, testare, documentare e mantenere, in particolare se confrontato con il vantaggio molto piccolo che offre. Avremmo potuto scegliere di supportarlo all'inizio: dopo tutto, VB ha sempre avuto argomenti con nome per le chiamate al metodo, ma abbiamo scelto di non farlo. –