初始化列表<>;来自另一个班级

本文关键字:另一个 列表 lt gt 初始化 | 更新日期: 2023-09-27 18:13:58

我定义了一个具有List<>的类。我缩短了代码。它太大了。List<>&在CCD_ 3中存在大量的代码。这是我的代码:-

 public class Time : ITime
 {
        public List<Table1> Setts1 = new List<Table1>();
        public List<Tabl2> Setts2 = new List<Table2>();
        public void LoadSettings1(int companyId)
        {
            Setts1 = ctx.tblSett1.Where(a => a.CompanyId == companyId).Select(a => a).ToList();
        }

       public double Method1()
       {
          var data = Setts1.Where(m => m.SetType == "TYPE1").Select(m => m.Value1).FirstOrDefault();
          ......
          ......
       }
     }

我想在另一节课上使用Method1()。我的问题是Setts1,它预装在Time类中。因此,当它在Time类中使用时,它具有Records。但当我从另一个类调用它时,显然Setts1将没有记录。我试图从另一个类初始化它,如下所示:-

public class Class
{
   .....
   Time cls = new Time();
   cls.Setts1 = ....;
   cls.Method1();
}

但CCD_ 10在CCD_ 11中不显示任何记录。如何从另一个类初始化List<>

初始化列表<>;来自另一个班级

在类外公开字段成员不是一个好的做法。因此,我建议使用属性,如下所示:

//Mark the field member as private
private List<Table1> _Setts1 = new List<Table1>();
//Use Property to access the field outside of the class
public List<Table1> Setts1
{
    get
    {
        if (_Setts1==null || _Setts1.Count()==0) //or any other logic you need
        {   
            //Initialize the field memeber
            _Setts1 = ctx.tblSett1.Where(a => a.CompanyId == companyId).Select(a => a).ToList();
        }
        return _Setts1
    }
}

通过这种方式,您可以忘记像LoadSettings1这样的方法,无论您在类内部还是外部使用Setts属性,它都会在正确的时间初始化。

您必须调用"LoadSettings1(int companyId("。这是一种带来记录并填充"列表"的方法。

public class Class
{
    .....
   Time cls = new Time();
   cls.LoadSettings1(1);
   cls.Setts1 = ....;
   cls.Method1();
}
public class Something
{
   private Time cls = new Time();
   public Something(int companyId)
   {
      cls.LoadSettings1(companyId);
   }
   public void CallMethod1()
   {
      cls.Method1();
   }
}

像这样的东西?将"其他类"的构造函数用于LoadSettings。

cls.Setts1 = ....;

事实上,我不明白你的代码怎么会不起作用,即使正如Hossein所说,这是一种糟糕的做法。看看你是如何设置cls的。Setts1(…部分(。这很可能是罪魁祸首