Stavo usando Dapper e averlo restituire un IEnumerable dinamica, in questo modo:Perché First() o ElementAt() su un oggetto IEnumerable dinamico è attendibile?
var rows = conn.Query("SELECT * FROM T WHERE ID = @id", new { id = tableId });
var row = rows.FirstOrDefault();
Qui, rows
è di tipo IEnumerable<dynamic>
. IntelliSense dice che FirstOrDefault()
è attendibile e ha l'utilizzo di await FirstOrDefault()
. Non tutte le query LINQ vengono mostrate come attendibili, ma sembrano soprattutto quelle che in qualche modo individuano gli elementi.
Non appena utilizzo invece una digitazione forte, questo comportamento scompare.
È perché .NET non può sapere se il tipo che si sta ricevendo in fase di esecuzione è attendibile o meno, in modo che "lo consenta", nel caso sia necessario? Ma non lo applica? O dovrei, a causa di alcuni comportamenti di Dynamic Language Runtime, utilizzare effettivamente await
qui?
Ho continuato a cercare ma non ho trovato la cosa più piccola di questo in linea.
è possibile attendere dal ritorno dinamico. Immagino che genererà un'eccezione se type non è un Task. Modifica: l'ho provato genererà un'eccezione se la dinamica non è Task o Task. –
Puoi chiamare 'GetAwaiter()' su 'dynamic', quindi sì è attendibile. – PetSerAl