c# - 初始化列表<>从另一个班级

时间:2015-09-23 05:15:33

标签: c# asp.net-mvc class oop

我已经定义了一个具有List<>的类。我缩短了我的代码。太大了。有太多List<>&amp;在Method1()中有很多代码。这是我的代码: -

 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();
}

但是Setts1Method1时没有显示任何记录。如何从另一个类初始化List<>

4 个答案:

答案 0 :(得分:2)

在班级之外公开班级的字段成员不是一个好习惯。所以我建议像这样使用属性

//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属性,它都会在正确的时间进行初始化。

答案 1 :(得分:1)

您必须调用'LoadSettings1(int companyId)'。这是带来记录并填充“列表”的方法。

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

答案 2 :(得分:0)

Storyboard

这样的东西?使用“其他类”的构造函数到LoadSettings。

答案 3 :(得分:0)

cls.Setts1 = ....;

实际上我看不出你的代码是如何工作的,即使正如Hossein所说,这是不好的做法。看看你是如何设置cls.Setts1(....部分)。这很可能是罪魁祸首