假设我有以下代码:
List<SomeObject> someObjects = ReturnListWithThousandsOfObjects();
foreach(SomeObject someobject in someObjects)
{
DoSomething.With(someObject);
}
还假设在运行一分钟后,我在 DoSomething.With(someObject);
上设置了一个断点。
调试器对我来说很好用。但现在我想知道我在列表迭代中处于什么位置(假设列表是无序的/没有键)。
有没有办法让调试器说“foreach
已运行 2321 次迭代中的 532 次”?
最佳答案
作为调试工具,难道没有 indexof 方法吗?
即
快速观察 - 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));
}
}
关于c# - 调试器可以告诉我 foreach 循环的计数/状态吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6299400/