web-dev-qa-db-fra.com

ActionResult <IEnumerable <T>> doit renvoyer une liste <T>

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();
13
Stuart

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>.

21
V0ldek