2008-12-17 6 views
0

J'ai une classe qui analyse un très gros fichier (qui ne peut pas tenir en mémoire) et j'utilise actuellement l'interface IEnumerable pour utiliser foreach afin que je puisse facilement récupérer le contenu analysé ligne par ligne. Actuellement, j'essaye d'écrire ceci au dossier en utilisant un XMLSerializer. Il insiste sur l'énumération de la classe et dans mon cas, cela signifie que le contenu de fichiers au format XML est important et analysé. Y at-il de toute façon (hackish ou élégant) pour utiliser cette interface et toujours obtenir la fonctionnalité "attendue" d'un XMLSerializer?Comment puis-je utiliser l'interface IEnumerable et en même temps, XMLSerializer n'utilise pas GetEnumerator()?

(je n'appeler cela « attendu », car cela semble un résultat attendu si j'exécutait une interface de collecte plutôt que IEnumerable. Peut-être que mes concepts de IEnumerable et collections est tout détraqué. :()

Répondre

2

J'ai réussi à résoudre ce problème sans avoir à changer de design. Aucun de mon code ne s'appuyait sur l'interface IEnumerable, juste l'implémentation de IEnumerable GetEnumerator() (apparemment foreach ne vérifie pas si IEnumerable est implémenté). Le simple fait de commenter l'interface dans la déclaration de classe a fait l'affaire.

+0

Solution brillante. J'avais ce même problème, où j'avais seulement besoin d'enquêteurs pour plus de commodité. En supprimant l'implémentation de l'interface (mais en fournissant toujours mes énumérateurs), ma sérialisation fonctionne à nouveau et je peux toujours utiliser foreach. – Chris

0

Il Il me semble que votre problème pourrait être résolu en utilisant une encapsulation plus stricte

Il semble que vous utilisiez la même classe pour charger vos données à partir d'un fichier, et pour stocker la représentation en mémoire de ces données. Dans le cas, vous pourriez (et peut-être devrait) déplacer la fonctionnalité dans deux classes, puis sérialiser uniquement la classe 'en-mémoire'

3

Eh bien, vous pouvez mettre en œuvre IXmlSerializable et saisir le contrôle total. Il n'est pas tout à fait clair (sans pseudo code) quelle est la configuration - parfois [XmlIgnore] peut aider, mais je ne suis pas sûr dans ce cas sans un exemple de ce que vous avez, et ce que vous faites/ne voulez pas.

+1

Salutations pour l'édition Jon; gros doigts aujourd'hui ;-p –

Questions connexes