IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C# Discussion :

Conception objet + Liste d'objets


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    81
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Mars 2007
    Messages : 81
    Par défaut Conception objet + Liste d'objets
    et bonjour bonjour !

    je crois que je suis en train de devenir dépendant de ce forum !
    il me faut mon post par jour sinon je fais des crises !

    j'ai donc mon web service (analayse SpamAssassin) qui, entre autre, lit des rapports en fichier txt et qui renvoie des informations contenues dans ces derniers. Voilà deux des principales méthodes :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    public float readScoreSA(string rapport) // renvoi la note générale contenu dans le rapport
     
    public ArrayList readWarningsSA(string rapport) // renvoi la liste des warnings (string) contenue dans le rapport
    je voudrais revenir sur la seconde méthode. c'est bien joli, mais du coup je suis un peu limité avec mon ArrayList.
    J'aimerais pouvoir mieux utiliser les warnings contenus dans le rapport. déjà il y a une note attribuée à chaque warning (figurant dans le rapport), et il serait intéressant que plus tard cela renvoi également pour chaque warning un "comment faire pour éviter ce warning !".

    Donc voilou, dois je créer une classe warning ?
    dans lequel je mettrais l'intitulé du warning, la note et le "commentaire".
    Et dans ma méthode readWarningSA, au lieu de remplir un arraylist de string, je remplis un arraylist d'objet Warnings ?

    Bon il faudrait du coup avoir une BD avec tous les warnings pour renvoyer le commentaire.

    Voilà, toutes mes questions..

    pouvez vous m'éclairer ?

    Merci

  2. #2
    Membre chevronné
    Profil pro
    Inscrit en
    Février 2003
    Messages
    311
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2003
    Messages : 311
    Par défaut
    Je pense que tu es dans le vrai avec ta classe Warning

    Le mieux étant de retourner un List<Warning>.

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    81
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Mars 2007
    Messages : 81
    Par défaut
    J'ai donc fait ma classe Warning. j'ai juste fait le constructeur qui prend en parametre l'intitulé du warning et sa note.

    donc dans ma méthode de lecture de fichier, pour chaque warning trouvé, je fait un new Warning avec les 2 éléments voulu, puis je fais un ArrayList.Add(Warning).

    au passage : je trouve pas la classe List, elle n'existe pas pour lui (j'ai fait un using System.Collections, dans lequel y'a le ArrayList)

    puis je renvoi le ArrayList

    Sauf que quand je teste, il gueule ! il n'arrive peut etre pas a afficher mes objets...

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    81
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Mars 2007
    Messages : 81
    Par défaut
    tant qu'a faire, voilà l'exception qu'il me lève :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    System.InvalidOperationException: There was an error generating the XML document. ---> System.InvalidOperationException: The type WarningsSA was not expected. Use the XmlInclude or SoapInclude attribute to specify types that are not known statically.
       at System.Xml.Serialization.XmlSerializationWriter.WriteTypedPrimitive(String name, String ns, Object o, Boolean xsiType)
       at Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationWriter1.Write1_Object(String n, String ns, Object o, Boolean isNullable, Boolean needType)
       at Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationWriter1.Write4_ArrayOfAnyType(Object o)
       at Microsoft.Xml.Serialization.GeneratedAssembly.ArrayListSerializer.Serialize(Object objectToSerialize, XmlSerializationWriter writer)
       at System.Xml.Serialization.XmlSerializer.Serialize(XmlWriter xmlWriter, Object o, XmlSerializerNamespaces namespaces, String encodingStyle, String id)
       --- End of inner exception stack trace ---
       at System.Xml.Serialization.XmlSerializer.Serialize(XmlWriter xmlWriter, Object o, XmlSerializerNamespaces namespaces, String encodingStyle, String id)
       at System.Xml.Serialization.XmlSerializer.Serialize(XmlWriter xmlWriter, Object o, XmlSerializerNamespaces namespaces, String encodingStyle)
       at System.Xml.Serialization.XmlSerializer.Serialize(XmlWriter xmlWriter, Object o, XmlSerializerNamespaces namespaces)
       at System.Xml.Serialization.XmlSerializer.Serialize(TextWriter textWriter, Object o, XmlSerializerNamespaces namespaces)
       at System.Xml.Serialization.XmlSerializer.Serialize(TextWriter textWriter, Object o)
       at System.Web.Services.Protocols.XmlReturnWriter.Write(HttpResponse response, Stream outputStream, Object returnValue)
       at System.Web.Services.Protocols.HttpServerProtocol.WriteReturns(Object[] returnValues, Stream outputStream)
       at System.Web.Services.Protocols.WebServiceHandler.WriteReturns(Object[] returnValues)
       at System.Web.Services.Protocols.WebServiceHandler.Invoke()

  5. #5
    Membre émérite
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    700
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2005
    Messages : 700
    Par défaut
    Citation Envoyé par zoubidaman Voir le message
    Le mieux étant de retourner un List<Warning>.

    Le mieux est de renvoyer un IEnumerable<Warning> ; au besoin un IList<Warning> : il est préférable de ne pas exposer une List, mais plutot une interface.

    Sinon tu bosses avec .Net 2.0?
    List<T> est une collection generique, namespace System.Collections.Generics

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    81
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Mars 2007
    Messages : 81
    Par défaut
    Alors là si vous me parlez d'interface, je vais mourir
    J'ai réussi à mettre le type List<> (merci Chubyone), je n'ai maintenant plus d'erreur, mais il m'affiche une liste vide.

    j'ai déclaré comme ça

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    public List<WarningsSA> readDetailsSA(string report)
    {
    List<WarningsSA> detailsList = new List<WarningsSA>();
    ...
    dans ma boucle de parcours, à chaque fois que je trouve ce qui m'intéresse, je fais ça

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    WarningsSA warning = new WarningsSA(ligne, scoreWarning);
     
    detailsList.Add(warning);
    j'ai essayé en faisant des List<string> puis detailsList.Add(ligne)

    ça marche

    pour mon problème précédent, j'ai cru comprendre qu'il y avait un problème de serialization... c'est encore le cas ?

  7. #7
    Membre émérite
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    700
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2005
    Messages : 700
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    
    public IEnumerable<WarningsSA> readDetailsSA(string report)
    {
    
    foreach / for je sais pas quoi
    {
      yield return new WarningsSA(ligne, scoreWarning);
    }
    
    }
    Pas de collection intermédiaire (si tu n'en as pas le besoin) => performance++


    Sinon une List<T> hérite de IList<T>, donc tu peux l'exposer sans problème

  8. #8
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    81
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Mars 2007
    Messages : 81
    Par défaut
    c'est gentil de m'aider mais là t'es vraiment en train de me perdre...

    j'aurai peut etre du signaler [debutant] dans mon post...

    Je ne sais pas manipuler une interface, ni vraiment à quoi ça sert exactement... on peut pas l'instancier.
    Et sinon je vois pas trop comment marche le bout de code que tu viens de me passer.

    Bref, je patoge... (une fois de plus !)

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Débutant] Mettre une Liste d'objets dans un objet sélectionnable
    Par khadime27 dans le forum C#
    Réponses: 1
    Dernier message: 19/09/2012, 10h51
  2. [Débutant(e)][Conception] prob de programmation objet
    Par gregorian dans le forum Général Java
    Réponses: 3
    Dernier message: 07/07/2005, 11h20
  3. [MFC] Retourner une liste d'objets
    Par 1cado dans le forum MFC
    Réponses: 10
    Dernier message: 28/07/2003, 12h11
  4. [Kylix] Composant - Liste d'objet
    Par Metal3d dans le forum EDI
    Réponses: 1
    Dernier message: 13/12/2002, 22h17
  5. liste d'objets
    Par Pierrot dans le forum Langage
    Réponses: 2
    Dernier message: 27/09/2002, 09h56

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo