2013-04-03 28 views
0

我正在尝试为一个学生检索一个模块列表,并将它们添加到另一个类的属性中以显示它们。我的目标是,当我创建一个人的实例并且他们的程序具有特定名称时,它将检索该程序的模块。C#将两个属性链接在一起?

这是我的程序类中的方法,我尝试从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")); 
    } 
} 

所以,我怎么能去获得在程序类ModuleList方法来获取从模块类的ListOfModules方法模块的这个名单?我知道这些模块正在添加到ListOfModules方法中,但他们似乎无法解决如何将它与ModuleList链接起来,因此我可以打印出该列表。

我会很感激任何帮助或支持,因为我花了无数的时间来解决这个问题。对不起,听起来像一个业余爱好者。

+1

你也许应该看看做一个集合。一个程序有很多模块。然后,您可以使用程序名称作为密钥 – 2013-04-03 22:02:09

回答

1

问题的根源似乎是您的基类中的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; } } 
+0

非常感谢您,在您打开我的眼睛后,我终于能够开始工作,是的,我知道这看起来非常愚蠢,我没有注意到它。我正在尝试各种各样的随机事物来使它起作用。 – Kash 2013-04-03 23:38:57

0

以你描述的方式没有直接的方式来链接这些东西。

我会推荐使用一个人员可以调用的临时服务来按名称检索模块。

0

看起来你的问题是List模块是在CGP子类中声明的,所以程序超类中的ModuleList属性无法访问它。如果您希望Programs类中的某个属性能够返回您在CGP构造函数中添加的模块,则需要将它们添加到Programs类的属性中,可能声明为protected,以便只有子类可以访问它。

其他一些看起来很奇怪的事情: 为什么你的ModuleList getter创建一个新的Modules对象然后返回它的一个属性?模块的构造函数是否做了一些事情来创建ListOfModules属性的基础数据或从某处取回数据?

为什么ListOfModules属性检查_modules是否为空,然后返回它是否为空?我会跳过和_modules属性,并做:

internal List<Modules> ListOfModules { get; private set; }