J'ai une fonction qui lit un fichier en morceaux. et dataObject ressemble à ceci: p> ce que je veux faire est le suivant essentiellement p> Je sais que ce n'est probablement pas comment c'est fait, car comment puis-je accéder à l'objet que je viens de lire. p> p>
4 Réponses :
Ceci est subjectif, mais je déteste ce modèle (et je reconnais pleinement que je suis dans la très petite minorité ici). Voici comment je le fais quand j'ai besoin de quelque chose comme ça. Mais ces jours-ci, il vaut mieux dire P> List<DataObject> dataObjects = GetItemsFromFile(path)
.TakeWhile(x => x.Category == "category")
.ToList();
Et aussi j'ai 4 descendeur que l'un d'entre eux a dit pourquoi? et non d'entre eux le suppriment.
@Sawed: cette réponse fait i> répond à la question, ainsi que de commander une approche alternative (meilleure). Arrêtez d'être si enfantin - votre réponse a été évitée parce que c'est une mauvaise réponse ... Survolez-la et arrêtez de descendre d'autres réponses hors de la SPITE.
@Jon Skeet, c'est votre idée. Et je viens de descendre Jason, pas d'autres. Ma réponse n'est pas mauvaise, c'est une réponse. oublié à ce sujet. Et mon nom n'est pas comme vu code> c'est saeed :)
@Saeed: Que voulez-vous dire "parce que c'est hors de la question?" C'est un comportement étrange, sûr.
@Saeed: C'est une réponse qui ne répond pas à la question. À mon esprit, cela en fait une mauvaise réponse. Cette réponse, cependant, celle que vous avez bullevée - fait i> répond à la question. Pouvez-vous donner de la raison b> de la descendant autre que parce que vous êtes ennuyé que d'autres ont évoqué votre réponse?
@Saeed: Toutes mes excuses d'orthographe pour avoir mal orthographié votre nom, BTW - c'était une faute de frappe, car j'écrivais le commentaire sur un téléphone, et cela a-t-il autocorré ça mal :(
@Jon, @jason, je viens de vous dire que je pense que la linq n'est pas une réponse (est conseillère) et le premier ne répond pas à la signature op code> S. Juste ceci, je n'ai pas bownvote @ Poindexter12 parce que son upvote est zéro, et je n'aime personnellement pas faire que quelqu'un a -1 score, sauf si la réponse n'est très mauvaise (comme p = np ou très lent)
@Saeed: Pourquoi "Linq n'est pas une réponse?" Qu'entendez-vous "Le premier n'adresse pas la signature op code> S" (sic).
Tout d'abord parce que "(est conseiller)" Vous pouvez résoudre ce problème avec des milliers de gens comme cette linq, mais ils ne répondent pas, secondes "tandis que (readnextFile (). Catégorie ==" Catégorie ")" est la signature de op code> code et
op code> dit
Comment accéder à l'objet que je viens de lire code>, et pourquoi tu veux expliquer ce que je pense? Non de vos amis qui vous ont évoqué, expliquez pourquoi me descendre (et peut-être vous). Si expliquer la raison de la bowvote est une règle sur site est une règle pour tout pas seulement moi.
@Saeed: la question comme écrit ne peut pas être répondue i> à répondre tout en conservant le pendant (readnextfile (). Catégorie == "catégorie") code> une partie (qui n'est pas une signature, par le chemin). Je vois que vous êtes aussi supposant i> que les upvotes pour cette réponse sont dus à l'amitié plutôt que de simplement être d'accord avec la réponse ... et vous êtes aussi supposant i> que les bowvotes lancés Contre vous correspond à des upvotes pour cette réponse. Ils font dans mon cas, mais vous ne devriez pas supposer que c'est vrai pour les autres.
Ils font dans mon cas, mais vous ne devriez pas supposer que c'est vrai pour les autres code> Vous pensez quelle différence entre vous et les autres? Et il vaut mieux les laisser se parler.
@Saeed: Euh, je suis pas i> parler pour d'autres, c'est le point - alors que vous avez supposé i> des motifs pour la mise en place de cette réponse et la descendez la vôtre.
List<DataObject> dataObjects = new List<DataObject>(); var category = new DataObject(); while((category=ReadNextFile()).Category == "category") { dataObjects.Add(category); }
@Saeed: Désolé, mon commentaire précédent ne l'a apparemment pas fait - je suis sur une connexion réseau 3G Flaky 3G. Cela ne compilera pas, car vous essayez d'ajouter une chaîne à une liste
dataObject code>. Voir ma réponse pour la version fixe.
@Jon Skeet, j'avais édité la réponse, merci, je n'ai pas pensé au type de liste que je veux juste montrer la manière dont op code> veut.
@Saeed: toujours -1, car pendant que tout ce que nous avons été montré est la propriété de la catégorie, dans la vie réelle, je m'attendrais à ce qu'il y ait plus de données dans l'objet ... qui se perdent avec votre code actuel. Comme l'OP dit, il veut se rappeler l'objet qu'il vient de lire i>, ne pas le reconstruire de l'information sur laquelle il filtrait. Ce n'est pas difficile à faire - regarde ma réponse.
(Gardez également à l'esprit que vous n'avez laissé que 2 minutes entre modifier votre réponse et vous attendre à ce que tous les bowvotes soient supprimés. Je suis surveille cette question, mais tout le monde ne sera pas ...) Considérant que la version précédente de votre réponse ne serait pas ont compilé, et même maintenant ce n'est pas vraiment ce qui a été demandé, je dirais que 5 upvotes et 3 bowvotes sont assez généreux;)
Non, j'ai une bownvote après avoir édité ma réponse :), et ma réponse actuelle répondra exactement à la question actuelle op code>.
@Saeed: Non, ça ne le fait pas. De la question: Comment puis-je accéder à l'objet que je viens de lire i>. Votre réponse ne résout pas cela.
@Jon Skeet, vous savez mieux que le op code> de sa question? lire le premier commentaire ci-dessus, l'idée était également ce que j'ai dit, ce n'est pas bon d'avoir quatre avoists à cause de la syntaxe ou de ..., je ne l'ai pas testé et y réfléchit, je viens de dire que l'idée, d'autres m'a révélé parce que leur la réponse était blague.
@Saeed: Lorsque l'OP a commenté, le code n'a même pas compilé. Mais je peux lire ce que dit la question de l'OP, comme j'ai cité - et votre réponse simplement ne pas i> faire face à cela. Si l'OP veut vraiment retourner un objet que seulement i> consiste en une chaîne, puis ajoutez la même chaîne exacte à la liste à chaque fois, je serais très surpris ... Est-ce que vous Vraiment I> pense que la classe code> dataObject code> ne consiste en une seule propriété? C'est intéressant comment vous prétendez que je ne peux pas comprendre la question de l'OP, mais vous êtes assez psychique de connaître les raisons de la baisse d'une réponse qui ne fonctionne pas ...
(Je soulignerais aussi que rien des autres réponses ne me semble "blagues". Lesquels pensez-vous, exactement?)
@Saeed: Down a voté cela parce que cette solution est difficile à lire. En outre, la bataille Nerd.
@Jon Skeet, je peux juste juger de ce que je peux voir (DataObject Class), dans tous les op code> après avoir appris que cela peut avoir une variation à ce sujet, je n'ai jamais dit que vous ne pouvez pas comprendre le
OP CODE> S QUESTION, je sais que vous ne pouvez pas comprendre ce que le
op code> veut mieux que lui, en dernier non des autres, les autres répondent aux adresses proches de la question.
@ POINDEXTER12, c'est d'abord difficile pour vous, deuxième c'est une réponse valide, troisième que vous devez bownvote de la réponse de Jon par votre raison.
@Saeed: Je trouve la réponse de Jon pour être plus lisible avec sa suggestion suppléante, mais je suis d'accord sans que j'aurais aussi voté. En outre, il est difficile pour moi de lire ce qui est la raison pour laquelle je l'ai fait voté avec mon vote en direct.
@ poindexter12, si la réponse est difficile pour vous, car vous ne connaissez pas cette syntaxe, par exemple si op code> veut la réponse par
linq code> Je peux descendre quelqu'un qui a répondu parce que c'est-à-dire Linq est difficile pour moi? Ce n'est pas une bonne raison, tandis que la réponse est valide que vous ne devriez pas indiquer quelqu'un, ma compétence de Linq est suffisamment bonne pour répondre à cela par Linq, mais le
op code> souhaite modifier la valeur dans
code> peut être ce n'est pas une bonne pratique, mais c'est une réponse à la question. Vous pouvez commenter n'est pas une bonne pratique ou ajoutez votre réponse et dites pourquoi vous le faites comme cela, mais ce n'est pas une raison pourvoiter.
@Saeed: Je soupçonne que l'OP a mal compris ce que votre réponse faisait. Je doute qu'il y aurait eu la suivi s'il avait vu qu'il ne compilait pas, par exemple. Maintenant, pourriez-vous expliquer de quelle manière votre réponse répond à la question de l'OP de «Comment puis-je accéder à l'objet que je viens de lire»?
@Jon Skeet, à première vue, je pense op code> veut lire
catégorie code>, élément extrait dans
pendant code> donc il est donc
comment Est-ce que j'accède à l'objet que je viens de lire code>, donc
op code> a eu le point, vous lisez ma réponse et d'autres personnes, puis j'ai laissé votre réponse, j'ai répondu à la question après que mon navigateur charge la page. :)
@Saeed: étant donné qu'il a obtenu une liste
@jon Skeet, non, vous pouvez écrire votre réponse après avoir pensé et juger ou sans cela, mais vous obtiendrez plus de 100 upvote pour chaque réponse simple que vous fournissez car vous êtes JON Skeet, et si je fournis votre réponse après que les autres réponses peuvent être obtenues Downvote (ou zéro point) Parce que je ne suis pas Jon Skeet et que je ne suis peut-être que je suis un tricheur, je devrais donc me lever des réponses en ligne ou répondre à des problèmes difficiles, jusqu'à ce que mon représentant devienne suffisamment bon et enfin, Jon Il est très facile après avoir vu quelques réponses (peut être fausse) en disant une meilleure réponse, et c'est pour vous non pas US (moins de 10000 ou 100 000 représentants)
@Saeed: Si vous postez une réponse correcte, il est peu probable que vous obteniez un vote. Si je pose une réponse incorrecte, je do i> obtenez des bowvotes - cela se produit parfois et je supprimai la réponse (s'il y a déjà une correction) ou simplement le réparer.
@Jon Skeet, je parle d'autre chose, mais pour cette question, ma réponse est vraie, mais j'ai eu une bownvote de vous et 3 autres personnes (peut être une erreur de compilation au début mais fixée), les non-voeux ont une bonne raison logique de Ne retirez pas la bowvote, mais ils ne l'ont pas fait. Vous avez personnellement une raison?
@Saeed: Oui, j'ai la raison que j'ai dit tout au long: ça ne répond pas à la question, imo. Les autres bowvotes ont peut-être été distribués avant que les utilisateurs ont vu i> la modification, ou ils peuvent simplement être d'accord avec mon analyse de cette analyse ne répondant pas à la question.
@Jon Skeet, ça ne répond pas quelle partie de la question?
@Saeed: Le peu que je continue à cibler: "Comment accéder à l'objet que je viens de lire" - c'est-à-dire le dataObject code>. Vous ne conservez que la catégorie, pas l'objet entier qui vient d'être lu. C'est une distinction assez simple et je l'ai soulevée plusieurs fois maintenant ... Je trouve difficile de croire que vous ne pouvez vraiment pas voir la différence entre votre réponse et votre mine, en termes de cette partie spécifique de la question.
@Jon Skeet, je pense que vous ne lisez jamais mon dernier édition il y a 13 heures, si vous lisez, je ne savais pas pourquoi la Downvote, je peux tout simplement dire est hors de la logique et je ne peux pas le comprendre.
@Saeed: En effet, je n'avais pas vu cela édition. Maintenant, la partie utile de la réponse: a) réplique simplement ma réponse, b) utilise un nom de variable trompeur (la variable code> code> ne représente pas réellement une catégorie, elle représente un dataObject Code>), c) crée un
dataObject code> sans raison. J'ai enlevé le Downvote car ce n'est plus un réponse activement inutile i> réponse - mais je ne pense pas que cela ajoute quelque chose d'utile par rapport à ce que ma réponse a été présentée il y a longtemps. Personnellement, si c'était l'autre sens (c'est-à-dire si j'avais dû modifier ma réponse i> et cela s'est retrouvé comme quelqu'un d'autre) Je ne le supprimerais pas.
@Jon Skeet, a) réplique simplement ma réponse Code> Si vous voulez parler de cette manière, je peux dire que vous venez de copier mon chemin par
d'attribution de valeur à la variable dans la déclaration conditionnelle code>. Cette partie était la partie importante de ma réponse et je le fais devant vous. Comment initialiser et quelle est la bonne pratique, la mauvaise pratique, ... ne sont pas le squelette de réponse.
@Saeed: Je ne comprends pas ce que vous voulez dire - étant donné que le point important était d'attribuer une valeur à une variable temporaire du type droit i> C'est difficile à voir de quelle manière je t'ai copié. J'ai pris la structure générale de l'OP et j'ai modifié cela pour répondre à sa question. Et je crois que donner un code sensible en termes de noms de variables et d'éviter les affectations inutiles est utile dans toutes les réponses i>. J'explique simplement pourquoi je ne pense pas que votre réponse mérite mon uppote.
@Saeed: Je devrais clarifier que mon point sur votre réponse de votre réponse, je n'ai pas été signifié dans un "accusant de toi tricherie i>" Sens - juste que c'est redondant car ma réponse fournit déjà cette suggestion. Je supprime fréquemment mes propres réponses si je trouve cela au moment où je les posterais, quelqu'un d'autre a déjà posté un qui est fondamentalement identique.
@Jon Skeet, je pense que la partie principale de ma réponse est attribution de valeur à la variable dans la déclaration conditionnelle code> (je ne peux pas l'expliquer mieux à cause de mon anglais) et ce n'est pas redondant parce que je le fais avant d'autres Réponses, oui parfois, je soumets la réponse et lorsque la page est rafraîchie, je verrai des réponses similaires, alors je vais le supprimer et à mon avis, ce n'est pas un cas.
@Saeed: Si vous le dites ... Je pense toujours que l'affectation de la valeur la valeur i> une variable a rendue votre réponse efficacement inutile jusqu'à votre édition finale ... qui était inutile à ce moment-là comme ma propre réponse l'avait couvert à ce moment-là. (Et je quitterais toujours ma réponse de toute façon, comme je pense que c'est mieux en raison de cette partie du code plus propre, ainsi que la suggestion d'éviter cette boucle maladroite en premier lieu. Linq est une solution beaucoup plus propre.)
6 ans plus tard, c'est encore une mauvaise réponse. Le premier extrait de code ne fait pas ce que OP a demandé i>. En effet, cela ne fait rien que quiconque i> est susceptible de toujours vouloir faire. Ce qui en fait une perte de temps pour essayer de donner un sens à cette réponse. Le deuxième extrait de code fait ce qui est demandé, mais est mal écrit: (1) la variable catégorie code> est mal nommée, car elle ne contient plus une catégorie. (2) La variable
Catégorie code> est initialisée sur une DataObject par défaut. Pourquoi? Il n'a pas besoin d'être initialisé du tout dans ce cas, car il n'est utilisé que dans la boucle. Si quelque chose, initialisez-le à NULL.
Vous devez examiner la mise en œuvre d'ienumerator sur le conteneur de classe l'appel à readnextfile (). Ensuite, vous auriez toujours référence à l'objet actuel avec ienumerator.Current et Movenext () retournera le bool que vous recherchez pour vérifier l'avancement. Quelque chose comme ceci:
Vous n'avez pas besoin d'aller à tous les tracas de la implémenter vous-même - utilisez plutôt des blocs d'itérateurs. Ils rock :)
Je suis d'accord que vous n'avez pas besoin de, mais si tel est le but de cet objet (lequel on dirait que c'est), il semble que c'est une solution plus élégante imo.
@ POINDEXTER12: La création d'un type entier explicitement puis de l'utiliser est plus élégante que d'écrire une méthode à l'aide d'un bloc d'itérateur? Je vous suggère d'essayer d'écrire une solution complète à la fois, puis de juger à nouveau ...
@Jon: Si vous regardez ce qu'il demande, et n'essayez rien d'ajouter quelque chose, oui, un itérateur est la plus petite solution la plus rapide. Sur la base de ce qu'il demandait ce qu'il demandait, il semblait de passer à travers une liste d'objets et de regarder ce que l'élément actuel reflète exactement le but de l'ienumerator, d'où la suggestion.
@ POINDEXTER12: Si vous créez un bloc Itérateur, vous pouvez toujours utiliser le ienumerator
Je pense que ce que vous cherchez est: mais je ne ferais pas ça. J'écrirais: p> où Ceci suppose que vous voulez vraiment arrêter de lire dès que vous trouvez le premier objet qui a une catégorie différente. Si vous souhaitez réellement inclure tous em> le (éditer: Saeed a depuis supprimé ses objections à la réponse, mais je suppose que je pourrais aussi Bien laisser l'exemple ...) p> Edit: Preuve que cela fonctionnera, comme Saeed ne semble pas me croire: P> lisitemems () code> était une méthode renvoyant un
ienumerable
retour de rendement code> etc.). P>
dataObject code> s,
Changer
MainMentiment code> à
où code> dans la requête de Linq ci-dessus. p>
1: yes
2: yes
3: yes
4: yes
5: yes
Heya, cela semble vraiment comme la meilleure solution pour cela. Il y a cependant une chose, le fichier que je lis peut être exceptionnellement grand (peu de mégaoctets). Lire tous les articles en avant, peut-il s'agir d'une question de performance?
Êtes-vous sûr que vous voulez demander?
J'ai du mal à essayer de comprendre exactement ce que vous voulez.
Je suis désolé je réalise ma question est très vague. C'est juste comment puis-je accéder à l'objet dans le moment (readnextelement ()): p
Re la logique de boucle, est-ce vraiment ce que vous voulez faire? Ne préféreriez-vous pas lire tous les dataOgjects «correspondants» du fichier, qu'il y ait d'autres entre ou non?
@Timo: Juste pour le record: suis-je raison de suggérer que votre réel
dataObject code> contient plus de propriétés que la catégorie que vous testez?
@Jon Skeet, désolé pour la réponse tardive n'avait aucune chance de vous connecter dans les derniers jours. Oui, tu es absolument juste à ce sujet.