【问题标题】:Cannot implicity Convert Type Threading.Tasks.Task<Collection.Generic.List<Model>> To Model无法将类型 Threading.Tasks.Task<Collection.Generic.List<Model>> 隐式转换为模型
【发布时间】:2020-08-24 18:46:31
【问题描述】:

我想从 .NET API 中获取数据,并将其包含在参考中。 但是,很糟糕,我遇到了以下异常。

错误 2 无法将类型 System.Threading.Tasks.Task&lt;System.Collections.Generic.List&lt;BizCover.Repository.Cars.Car&gt;&gt; 隐式转换为 BizCover.Api.Cars.Model.CarsVM

这是我在 API 控制器中的代码。

public IHttpActionResult getAllDataCars()
    {
        CarRepository carRep = new CarRepository();

        IHttpActionResult result = null;

        try
        {
            CarsVM dataAPICars = new CarsVM(); 
            dataAPICars = carRep.GetAllCars(); //here's the error return.

            if (dataAPICars != null) 
            {
                var a = "ada";
            }
            else
            {
                var b = "null";
            }
        }
        catch (Exception ex)
        {
            var c = ex.ToString();
        }

        return result;

    }

这也是我的模型

public class CarsVM
{
    public CarsVM()
    {

    }

    public string Colour { get; set; }
    public string CountryManufactured { get; set; }
    public int Id { get; set; }
    public string Make { get; set; }
    public string Model { get; set; }
    public decimal Price { get; set; }
    public int Year { get; set; }

    public CarsVM(string Colour, string CountryManufactured, int Id, string Make, string Model, decimal Price, int Year)
    {
        this.Colour = Colour;
        this.CountryManufactured = CountryManufactured;
        this.Id = Id;
        this.Make = Make;
        this.Model = Model;
        this.Price = Price;
        this.Year = Year;
    }

}

这里的目标是我想从参考 (CarRepository) 中获取数据并将其存储在我的模型中。 我没有清楚地理解 .NET Framework API 应该如何逐步工作以及如何实现 await async。

【问题讨论】:

  • 嗨,您确定产生错误的行了吗?如果有,请在代码中注明

标签: c# asp.net .net api async-await


【解决方案1】:

首先,要修复Task 问题,您需要等待它,因此您的方法签名需要更改为async 方法:

public async Task<IHttpActionResult> getAllDataCars()

别担心 - 它仍会按预期工作。 ASP.NET 知道这是什么。

然后你可以await你正在调用的异步方法:

dataAPICars = await carRep.GetAllCars();

现在,这会稍微改变你的名义问题,但它仍然会产生本质上相同的问题:

Cannot implicity convert type Collection.Generic.List<Model> to Model

这里的问题是列表中可能有很多汽车,而您想要一辆汽车。显然我们不能将一个满是汽车的停车场转换成一辆车,所以 C# 也不能将一个汽车列表转换成一辆车。

假设只能有一个条目,您可以使用SingleOrDefault

dataAPICars = (await carRep.GetAllCars()).SingleOrDefault();

如果可以有多个,但你只想要第一个/最后一个,你应该使用.FirstOrDefault().LastOrDefault()

dataAPICars = (await carRep.GetAllCars()).FirstOrDefault();

如果您确实需要汽车列表,则需要将dataAPICars 更改为List&lt;Model&gt; dataAPICars 而不是Model dataAPICars。然后您可以返回该列表而不是单个项目,当然还可以将检查从 dataAPICars != null 更改为 dataAPICars.Any() 等。

如果你想要别的东西,恐怕你必须弄清楚你的汽车清单是如何变成一辆车的。

【讨论】:

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