web-dev-qa-db-ja.com

ActionResult <IEnumerable <T >>はList <T>を返す必要があります

ASP.NET Core 2.1を使用して次のコードを取得します。

_[HttpGet("/unresolved")]
public async Task<ActionResult<IEnumerable<UnresolvedIdentity>>> GetUnresolvedIdentities()
{
   var results = await _identities.GetUnresolvedIdentities().ConfigureAwait(false);
   return results.ToList();
}
_

GetUnresolvedIdentities()が_IEnumerable<UnresolvedIdentity>_を返すので、ただ返すことができると思っていたでしょう

_return await _identities.GetUnresolvedIdentities().ConfigureAwait(false);
_

私ができないのを除いて、私はこのエラーを受け取ります:

CS0029型_'System.Collections.Generic.IEnumerable<Data.Infrastructure.Models.UnresolvedIdentity>'_を_'Microsoft.AspNetCore.Mvc.ActionResult<System.Collections.Generic.IEnumerable<Data.Infrastructure.Models.UnresolvedIdentity>>'_に暗黙的に変換できません

.ToList()が必要です。これは1行ではなく2行なので迷惑です。

なぜ_ActionResult<T>_がGetUnresolvedIdentities()が_IEnumerable<>_を返し、それを返すだけなのかわかりませんか?

GetUnresolvedIdentitiesの署名は次のとおりです。

_Task<IEnumerable<UnresolvedIdentity>> GetUnresolvedIdentities();
_
13
Stuart

Msdnから次のドキュメントを入手してください: https://docs.Microsoft.com/en-us/aspnet/core/web-api/action-return-types?view=aspnetcore-2.1#actionresultt-type

C#は、インターフェイスでの暗黙的なキャスト演算子をサポートしていません。したがって、ActionResult<T>を使用するには、インターフェイスを具象型に変換する必要があります。

21
V0ldek