0

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

这是我在 Program 类中的方法,我尝试从 Modules 类中的 ListOfModules 方法中获取模块。

    public List<Modules> ModuleList
    {
        get
        {
            Modules m = new Modules();

            if (m.ListOfModules == null)
            {
                return null;
            }
            else
            {
                return m.ListOfModules;
            }
        }
    }

这是 Modules 类中的 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"));
    }
}

那么,我如何才能在 Program 类中获取 ModuleList 方法以从 Modules 类中的 ListOfModules 方法中获取此模块列表呢?我知道这些模块正在添加到 ListOfModules 方法中,但我似乎无法弄清楚如何将其与 ModuleList 链接,因此我可以打印出该列表。

我将不胜感激任何帮助或支持,因为我花了无数时间试图解决这个问题。抱歉听起来像个业余爱好者。

4

3 回答 3

1

您问题的根源似乎是您的基类中的 ModuleList 。我也不明白为什么你有 2 个级别的列表,它们似乎是完全相同的实现。

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-03T22:16:08.367 回答
0

没有直接的方法可以按照您描述的方式将这些东西联系起来。

我建议使用 Person 可以调用的临时服务来按名称检索模块。

于 2013-04-03T22:05:14.977 回答
0

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

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

为什么您的 ListOfModules 属性检查 _modules 是否为空,然后返回它是否为空?我会跳过它和 _modules 属性并执行以下操作:

internal List<Modules> ListOfModules { get; private set; }
于 2013-04-03T22:12:07.267 回答