无法将类型 Systems.Collection.Generic.List<feedEventViewModel> 隐式转换为 Proj.Areas.Management.Models.FeedEventViewModel

Can not implicity convert type Systems.Collection.Generic.List<feedEventViewModel> to Proj.Areas.Management.Models.FeedEventViewModel

我正在尝试将视图模型转换为列表,然后 return 将其转换为视图,但出现 cannot implicity convert type 错误。

代码:

public ActionResult Index(FeedEventCommand command)
{
    var feedEventViewModel = new FeedEventViewModel
    {
        AnimalId = command.AnimalId,
        AnimalName = command.AnimalName,
        FeederTypeId = command.FeederTypeId,
        FeederType = command.FeederType
    };
    feedEventViewModel = new List<feedEventViewModel>();  <--Error line

    return View(feedEventViewModel);
}

在这种情况下我做错了什么?

feedEventViewModel 已声明为单个对象,您不能将其再次声明为 List<FeedEventViewModel>()Rust 等其他语言允许您 "shadow" 变量声明,但 C# 不允许(var 只是声明变量的一种更短的方式)。
你可以很容易地解决这个问题:

return View(  new List<FeedEventViewModel>() {
    new FeedEventViewModel{
        AnimalId = command.AnimalId,
        AnimalName = command.AnimalName,
        FeederTypeId = command.FeederTypeId,
        FeederType = command.FeederType
       }
    }
    );

您可能误解了 var 关键字在这里的作用。当你用 var 声明一个变量时,你并不是说这个变量可以是任何东西,你是在告诉编译器它可以计算出类型是什么而不需要你精确地指定它。

因此在您的示例(或稍作修改)中,当编译器遇到代码时:

var feedEventViewModel = new FeedEventViewModel();

它将看到赋值的右侧是类型 FeedEventViewModel,因此变量 feedEventViewModel 将是该类型。实际上它就像你输入的一样:

FeedEventViewModel feedEventViewModel = new FeedEventViewModel();

以后对该变量的任何使用都必须符合此声明,因此当您执行 feedEventViewModel = new List<feedEventViewModel>(); 时,编译器会正确地说 List<feedEventViewModel> 不是 feedEventViewModel 预期的类型。存在隐式转换这样的事情,编译器知道如何在两种不同类型之间进行转换,并且可以在没有特别要求的情况下进行转换,但是没有找到这样的隐式转换,因此出现错误。

从给出的信息中不清楚您到底在做什么(您创建的项目是要在列表中吗?您的视图需要一个列表还是单个项目?)。如果您需要包含该项目的列表,那么我会选择:

var list = new List<feedEventViewModel>(){feedEventViewModel };
return View(list);