2013-04-03 6 views
0

J'essaye de récupérer une liste de modules pour un étudiant et de les ajouter à une propriété dans une autre classe afin de les afficher. Le but que j'ai est, quand je crée une instance d'une personne et leur programme a un certain nom, il récupérera les modules pour ce programme.C# lier deux propriétés ensemble?

Ceci est ma méthode dans ma classe Program où j'essaie d'obtenir les modules de la méthode ListOfModules dans la classe Modules.

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

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

Il s'agit de la méthode ListOfModules de la classe Modules.

internal List<Modules> ListOfModules 
    { 
     get 
     { 
      if (_modules == null) 
      { 
       return _modules; 
      } 
      else 
      { 
       return _modules; 
      } 
     } 
    } 

et voici un exemple de comment ajouter des modules à une liste de 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")); 
    } 
} 

Alors, comment puis-je faire pour obtenir la méthode ModuleList dans la classe du programme pour obtenir la liste des modules de la méthode ListOfModules dans la classe des modules? Je sais que ces modules sont en train d'être ajoutés à la méthode ListOfModules mais ils ne semblent pas pouvoir être reliés à ModuleList pour que je puisse imprimer cette liste.

J'apprécierai n'importe quelle aide ou appui pendant que j'ai passé le nombre innombrable d'heures essayant de comprendre cela. Désolé d'avoir l'air d'un amateur.

+1

Vous devriez peut-être envisager de faire une collection. Un programme a plusieurs modules.Vous pouvez ensuite utiliser le nom du programme comme une clé –

Répondre

1

La racine de votre problème semble être votre ModuleList dans votre classe de base. Je ne comprends pas non plus pourquoi vous avez 2 niveaux de listes qui semblent être exactement la même implémentation.

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

Cela semble particulièrement stupide:

internal List<Modules> ListOfModules 
{ 
    get 
    { 
     if (_modules == null) 
     { 
      return _modules; 
     } 
     else 
     { 
      return _modules; 
     } 
    } 
} 

vous retournez la même chose de toute façon si le chèque est inutile. C'est essentiellement le même que celui-ci:

internal List<Modules> ListOfModules { get { return _modules; } } 
+0

Merci beaucoup, j'ai pu enfin le faire fonctionner après avoir ouvert les yeux un peu et oui je sais que cela semble très bête je ne l'ai pas remarqué. J'essayais toutes sortes de choses aléatoires pour le faire fonctionner. – Kash

0

Il n'y a aucun moyen direct de lier ces choses de la manière que vous décrivez.

Je recommanderais d'utiliser un service temporaire que la personne peut appeler pour récupérer les modules par leur nom.

0

On dirait que votre problème est que les modules List sont déclarés dans la sous-classe CGP, donc la propriété ModuleList de la superclasse Programs ne peut pas y accéder. Si vous voulez qu'une propriété de la classe Programmes puisse renvoyer les modules que vous ajoutez dans le constructeur CGP, ils doivent être ajoutés à une propriété de la classe Programmes, peut-être déclarée comme protégée, afin que seules les sous-classes puissent accéder il.

Quelques autres choses qui semblent étranges: Pourquoi votre moduleList crée-t-il un nouvel objet Modules, puis renvoie une propriété? Est-ce que le constructeur des modules fait quelque chose pour créer les données sous-jacentes à cette propriété ListOfModules ou pour les récupérer de quelque part?

Pourquoi votre propriété ListOfModules vérifie-t-elle si _modules est null, puis le retourne, qu'il soit nul ou non? Je sauter cela et la _modules propriété et à faire:

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