Supposons que j'ai le code suivant: et supposons également qu'après une minute d'exécution, je mets un point d'arrêt sur Le débogueur se brise pour moi juste bien. Mais maintenant, je veux savoir quel point suis-je à mon itération de la liste (supposons que la liste est non ordonnée / n'a pas de clé). P> existe un moyen pour le débogueur de dire "le doSomething.avec (personnage); code>. P> foreach code> a exécuté 532 sur 2321 itérations "? P> P>
6 Réponses :
sauf si vous ne conserrez manuellement pas dans une variable, vous ne pourrez pas déterminer facilement cela. Alors que la boucle est itération de votre collection, il utilise simplement l'énumérateur pour saisir l'élément suivant de la collection Dis Il n'y a plus d'éléments auquel cela se ferme.
Pour garder manuellement un comte, vous feriez simplement: P> maintenant à tout moment, vous pouvez suspendre l'exécution et voir quelle itération vous êtes sur p> p>
Je ne pense pas que vous répondiez à la question pour la même raison que donnée à Stack72
@Mike Miller à partir de la dernière ligne de la question que j'ai rassemblé qu'il voulait savoir s'il y avait un moyen facile de passer du débogueur «Le forach est dans l'itération X de Y». La réponse est qu'il n'y a pas, et vous devez suivre cela vous-même. Si vous alliez quitter la variable de comptage dans votre code et non seulement le supprimer après le débogage, vous pouvez utiliser des directives de préprocesseur pour qu'il soit exclu de la compilation lors de la mise en place de la libération.
est ce cas, si vous vouliez vraiment savoir ce que le compte est, n'utiliseriez-vous pas un Il n'y aura pas de réel Différence de performance entre le pour code> boucle? foreach code> et le pour code> boucles - donc le pour code> boucle sera une meilleure alternative pour la situation que vous souhaitez réaliser. < / p> p>
Pourquoi introduire les frais généraux juste pour le débogage de l'inspection?
Y a-t-il une surcharge? Cela répond au bref où il reçoit une production du nombre d'itérations - sans avoir à arrêter le débogueur
Peut-être que mon interprétation, mais il n'indique pas cela, "et supposons aussi qu'après une minute de course, je posai un point d'arrêt sur DOSOMHEATHEATH. - Semble qu'il veut une valeur ponctuelle et non un statut de fonctionnement.
haha sa mon interprétation qui est incorrecte - je reprend ça :)
Je pense que la seule surcharge que je peux voir est la console.writeine. Ce n'est pas vraiment nécessaire d'atteindre ce que l'OP a demandé. Il veut juste voir quelle itère il est sur laquelle il est sur, inspecter la valeur de personnalité et de personnalité de ToNobj.Count lui donnera cette information. Le reste de cela est sur place à mon avis. (Edit: Je dois vraiment taper plus vite :))
-1 Vous ne remplissez pas non plus quelque chose ou déclarez-le :) Évidemment je vais uppoter lorsqu'il est corrigé.
Correction - devait copier et coller - essayé de répondre beaucoup trop vite à l'origine par l'apparence de celle-ci :(
@Mike Miller - Pas besoin de vous excuser du tout :)
comme un débogage One OFF n'existe pas d'index de la méthode?
IE P>
Quickwatch - SomeObject.indexof (SomeObject); P>
ajouté - désolé si un peu brève . P>
Comme indiqué par GUFFA Cela fonctionnera mieux si les valeurs sont uniques ou la fonction Équilibre Équilibre par défaut, la fonction EqualityComParer utilise une valeur unique (telle qu'une surcharge de get personnalisé / égal). P>
public class ATest
{
public int number { get; set; }
public int boo { get; set; }
public ATest()
{
}
}
protected void Go()
{
List<ATest> list = new List<ATest>();
foreach(var i in Enumerable.Range(0,30)) {
foreach(var j in Enumerable.Range(0,100)) {
list.Add(new ATest() { number = i, boo = j });
}
}
var o =0; //only for proving concept.
foreach (ATest aTest in list)
{
DoSomthing(aTest);
//proof that this does work in this example.
o++;
System.Diagnostics.Debug.Assert(o == list.IndexOf(aTest));
}
}
Cela fonctionnerait tant qu'il n'y a pas de doublons dans la collection. Si c'est le cas, il ne peut pas dire lequel des objets correspondants que vous examinez.
Dépend de ce que la comparaison est faite, si son code hachage peut être unique, MMM peut-être que je vais rétracter cette déclaration.
@Mike Miller: Je pense que vous devriez juste ajouter ses limitations. Il peut toujours être utile quand il s'applique.
Celui-ci semble le plus susceptible de travailler pour ce que je veux. (Je ne veux pas ajouter plus de code pour un chèque de débogage unique. Cela semble me permettre d'obtenir l'index (la plupart du temps) et de ne pas avoir à modifier mon code). MERCI!
Merci d'avoir accepté, je pense que la réponse donnée par Andrei est bien meilleure.
J'ai évoqué la réponse d'Andrei, mais le vôtre correspond à ce que je cherchais mieux.
La méthode indexof () fonctionne pour moi. C'était très utile pour un scénario simple.
Ceci est pour Visual Studio, mais d'autres idées devraient avoir quelque chose de similaire: p>
Lorsque vous définissez un point d'arrêt, vous pouvez cliquer avec le bouton droit de la souris et aller sur "Hit Compte". Vous pouvez configurer certains paramètres là-bas («supérieur ou égal à» 0 le permettra de fonctionner comme un point d'arrêt régulier - ainsi de «casser toujours»). La partie intéressante est le champ de comptage Hit (qui peut être réinitialisé). P>
Cela peut résoudre le "nombre d'itérations". Pour le nombre total, je crains que vous n'ayez pas besoin de le trouver vous-même, en supposant que la collection que vous utilisez a un tel nombre facilement disponible. P>
Vous pouvez également définir le point d'arrêt pour tirer après un très grand nombre de hits, disons quelques milliers / millions (je ne sais pas quelle est leur limite). Ensuite, lorsque le point d'arrêt "réel" incendie, celui où vous voulez savoir combien de fois le point d'arrêt d'origine a été touché, vous pouvez simplement l'examiner et le réinitialiser si nécessaire. P>
C'est bien si vous voulez vous arrêter après une quantité prédéterminée de coups de coups au point d'arrêt, mais pas à un point arbitraire. Si vous rompez toujours au point d'arrêt, il serait un peu erroné de continuer à avoir à cliquer sur Continuer pour un 1000 articles.
Il doit être Hit Count> = 1 code>. Le réglage sur 0 est invalide (au moins dans VS 2015).
Créer une méthode d'extension sur la liste et la liste qui accepte un pli d'action, action latérale d'action qui accumulez des effets secondaires comme la vérification de l'existence d'un débogueur et de la rupture de l'état accumulé. P>
oui ça peut. Voici comment [en vs 2017]: P>
$ fonction {list.items.indexof (item)} code> où 'list' est le nom de votre liste et "élément" est l'élément actuel < / li>
- Continuez à exécuter le code et regardez la fenêtre de sortie li>
ol>
Downvote, expliquez pourquoi cette solution ne fonctionne pas.
Cette question est très similaire à Celui-ci , veuillez vous reporter à Ma réponse là-bas a>
La question canonique est Comment obtenez-vous l'index de l'itération actuelle d'une boucle de Foreach? i> (mais Il pourrait y avoir des tours de débogueur supplémentaires).