Vac*_*ano 8 c# debugging foreach
假设我有以下代码:
List<SomeObject> someObjects = ReturnListWithThousandsOfObjects();
foreach(SomeObject someobject in someObjects)
{
DoSomething.With(someObject);
}
Run Code Online (Sandbox Code Playgroud)
并且还假设在运行一分钟之后我放了一个断点DoSomething.With(someObject);.
调试器对我来说很好.但是现在我想知道我在列表的迭代中的位置(假设列表是无序的/没有键).
有没有办法让调试器说" foreach已经运行了2321次迭代的532次"?
作为一个调试一个没有索引方法?
即
quickwatch - someObjects.indexOf(someObject);
添加 - 对不起,如果有点简短.
正如Guffa所指出的,如果值是唯一的,或者默认的相等比较器EqualityComparer函数使用唯一值(例如自定义GetHashCode/Equals重载),这将最有效.
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));
}
}
Run Code Online (Sandbox Code Playgroud)
这适用于Visual Studio,但其他IDE应该有类似的东西:
设置断点时,可以右键单击它并转到"命中计数".你可以在那里设置一些参数("大于或等于"0将使它像常规断点一样工作 - 所以会"总是打破").有趣的部分是命中计数字段(可以重置).
这可以解决"迭代次数"部分.对于总数,我担心你将不得不自己找到它,假设你使用的系列有这样的数字随时可用.
您还可以将断点设置为在大量点击之后触发,比如几千/百万(我不知道它们的限制是多少).然后,当"真实"断点触发时,您想要知道原点断点被击中多少次,您可以检查它并在需要时重置它.
| 归档时间: |
|
| 查看次数: |
3054 次 |
| 最近记录: |