【问题标题】:Implicit conversion of T to ActionResult<T> does not work for some typesT 到 ActionResult<T> 的隐式转换不适用于某些类型
【发布时间】:2018-06-27 04:44:11
【问题描述】:

在asp.net core 2.1中,引入了AsctionResult&lt;T&gt;,并定义了从TActionResult&lt;T&gt;的隐式类型转换

在我的代码中,我收到一些转换错误。例如:

Error   CS0029  Cannot implicitly convert type 'System.Collections.IEnumerable' to 'Microsoft.AspNetCore.Mvc.ActionResult<System.Collections.IEnumerable>'

虽然相同的转换适用于其他类型。我的代码中定义的几种类型也出现此错误。

上述错误的代码是:

        public async Task<ActionResult<IEnumerable>> GetByFilter([FromBody]EntityListRequest request)
        {
            return await _entityHandler.GetByFilter(request);
        }

_entityHandler.GetByFilter() 在哪里:

Task<IEnumerable> GetByFilter(EntityListRequest request);

【问题讨论】:

  • 返回IEnumerable&lt;T&gt;是否有效?您返回非泛型 IEnumerable 似乎很奇怪。
  • @Brad 我刚刚测试并得到了同样的错误。返回非泛型IEnumerable 的原因是在编译时不知道可枚举成员的实际类型。这取决于请求的某些属性。

标签: c# asp.net-core type-conversion implicit-conversion


【解决方案1】:

好的。显然这对于​​(某些?)接口会失败。此 QA 中提供了更多信息:Why does this implicit type conversion in C# fail?

一种解决方法是使用ActionResult的构造函数:

            return new ActionResult<IEnumerable>(myData);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-12-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多