我正在尝试检索一个学生的模块列表,并将它们添加到另一个类的属性中,以便显示它们。我的目标是,当我创建一个person的实例,并且他们的programme具有特定的名称时,它将检索该程序的模块。
这是我的Programme类中的方法,我尝试从modules类中的ListOfModules方法中获取模块。
public List<Modules> ModuleList
{
get
{
Modules m = new Modules();
if (m.ListOfModules == null)
{
return null;
}
else
{
return m.ListOfModules;
}
}
}
这是模块类中的ListOfModules方法。
internal List<Modules> ListOfModules
{
get
{
if (_modules == null)
{
return _modules;
}
else
{
return _modules;
}
}
}
下面是我如何将模块添加到模块列表中的示例。
class CGP : Programmes
{
List<Modules> modules;
public CGP() :base("CGP") //CGP is the name of the programme
{
modules = new List<Modules>();
modules.Add(new Modules("example 1"));
modules.Add(new Modules("example 2"));
}
}
那么,我该如何着手获取Programme类中的ModuleList方法,以便从modules类中的ListOfModules方法获取此模块列表呢?我知道这些模块正在被添加到ListOfModules方法中,但是我似乎不知道如何将它与ModuleList链接起来,这样我就可以打印出那个列表。
我将感谢任何帮助或支持,因为我已经花费了无数的时间试图弄清楚这一点。抱歉,我听起来像个外行。
发布于 2013-04-04 06:16:08
问题的根源似乎在于基类中的ModuleList。我也不明白为什么你有两个级别的列表,看起来是完全相同的实现。
class Programme
{
private List<Module> _modules = new List<Module>();
public List<Module> Modules { get { return _moduleList; } }
}
class CGP : Programme
{
public CGP() :base("CGP")
{
Modules.Add(new Module("example 1"));
Modules.Add(new Module("example 2"));
}
}
这看起来特别愚蠢:
internal List<Modules> ListOfModules
{
get
{
if (_modules == null)
{
return _modules;
}
else
{
return _modules;
}
}
}
无论哪种方式返回的都是相同的东西,所以检查是不必要的。它本质上是一样的,就像这样:
internal List<Modules> ListOfModules { get { return _modules; } }
发布于 2013-04-04 06:05:15
没有直接的方法可以像你所描述的那样将这些东西联系起来。
我建议使用一个临时服务,人们可以调用它来按名称检索模块。
发布于 2013-04-04 06:12:07
看起来您的问题是列表模块是在CGP子类中声明的,因此Programmes超类中的ModuleList属性无法访问它。如果您希望Programmes类中的属性能够返回您在CGP构造函数中添加的模块,则需要将它们添加到Programmes类的属性中,可能声明为protected,以便只有子类才能访问它。
还有一些看起来很奇怪的事情:为什么ModuleList getter要创建一个新的模块对象,然后返回它的一个属性?模块的构造函数是创建ListOfModules属性的底层数据,还是从某个地方检索数据?
为什么您的ListOfModules属性要检查_modules是否为null,然后返回它是否为null?我将跳过这一点和_modules属性,并执行以下操作:
internal List<Modules> ListOfModules { get; private set; }
https://stackoverflow.com/questions/15798913
复制相似问题