Prenez le code suivant à l'aide d'ASP.NET Core 2.1:
[HttpGet("/unresolved")]
public async Task<ActionResult<IEnumerable<UnresolvedIdentity>>> GetUnresolvedIdentities()
{
var results = await _identities.GetUnresolvedIdentities().ConfigureAwait(false);
return results.ToList();
}
J'aurais pensé que GetUnresolvedIdentities()
retourne IEnumerable<UnresolvedIdentity>
Que je pourrais simplement retourner
return await _identities.GetUnresolvedIdentities().ConfigureAwait(false);
Sauf que je ne peux pas, car je reçois cette erreur:
CS0029 Impossible de convertir implicitement le type
'System.Collections.Generic.IEnumerable<Data.Infrastructure.Models.UnresolvedIdentity>'
En'Microsoft.AspNetCore.Mvc.ActionResult<System.Collections.Generic.IEnumerable<Data.Infrastructure.Models.UnresolvedIdentity>>'
J'ai besoin de la .ToList()
, ce qui est ennuyeux car c'est 2 lignes plutôt que 1.
Pourquoi ActionResult<T>
Ne peut-il pas comprendre que GetUnresolvedIdentities()
renvoie un IEnumerable<>
Et le renvoie simplement?
La signature de GetUnresolvedIdentities
est:
Task<IEnumerable<UnresolvedIdentity>> GetUnresolvedIdentities();
Prenez cette documentation de msdn: https://docs.Microsoft.com/en-us/aspnet/core/web-api/action-return-types?view=aspnetcore-2.1#actionresultt-type
C # ne prend pas en charge les opérateurs de transtypage implicites sur les interfaces. Par conséquent, la conversion de l'interface en un type concret est nécessaire pour utiliser
ActionResult<T>
.