为了账号安全,请及时绑定邮箱和手机立即绑定

如何将模型的实例添加到列表

如何将模型的实例添加到列表

C#
隔江千里 2021-05-03 12:53:48
我正在没有数据库的情况下通过MVC教程进行工作。服务等级namespace Domain.Services{    public class ThingService    {        private List<Thing> _things;        private List<Thing> Things        {            get            {                 if (this._things == null)                 {                     this._things = new List<Thing>();                     this._things.Add(new Thing()                     {                         ID = 1,                         Name = "The red thing",                         Color = "Red",                         Size = "Small",                         Length = 55,                         DateAvailable = DateTime.Parse("1/1/2018"),                         IsActive = true                     });                     // Add more things               }               return this._things;            }        }控制器namespace WWW.Controllers{    public class HomeController : Controller    {        private readonly ThingService _thingService;        public HomeController()        {            this._thingService = new ThingService();        }        public ActionResult AddThing()        {            //add code for a new thing            return View();        }    }}我需要帮助将我的模型的新实例添加到列表(_things?Things?)。我尝试了服务类执行此操作的方式,并得到范围解析错误。我可以通过控制器中可用的_thingService变量来执行此操作吗?我需要在我的服务类别中添加一个方法吗?任何想法将不胜感激!
查看完整描述

2 回答

?
慕妹3146593

TA贡献1820条经验 获得超9个赞

您的代码有很多问题。首先,您在getter(Things)中做得太多。就其性质而言,属性应该是轻量级的数据访问成员。如果您需要繁重的工作,那就是考虑使用方法而不是属性。

这样一来,您就会遇到一个问题:每次有人访问您的列表时,都将对其进行重新构建,因为这就是您的getter内在的逻辑;您每次实例化并重新构建列表。

第三,您需要在课外提供对财产的访问权限。目前您的Things财产是private,因此将其更改为publicinternal

这是一种简单的方法:

public List<Thing> Things { get; } = new List<Thing>();

这是一个公共属性(您可以在类外部访问),该属性在构造类时实例化列表,并提供对列表的只读访问权限,即无法为其分配新的列表实例。这是您可以在另一个类中使用它的方法:

this._thingService.Things.Add(...);


查看完整回答
反对 回复 2021-05-15
  • 2 回答
  • 0 关注
  • 155 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信