调用 EnvDTE80.ErrorItems.item() 时获取 "Index was outside the bounds of the array."

Getting "Index was outside the bounds of the array." while calling EnvDTE80.ErrorItems.item()

我试图获取 Visual Studio 2015 错误列表 window 中的所有错误,但在尝试通过 errors.Item 访问 ErrorItem 时出现索引超出范围的异常(我打电话。我错过任何演员吗?

EnvDTE80.DTE2 dte2 =  ServiceProvider.GetService(typeof(EnvDTE.DTE)) as DTE2);
ErrorItems errors = dte2.ToolWindows.ErrorList.ErrorItems;
for (int i = 0; i < errors.Count; i++)
{
    ErrorItem item = errors.Item(i);
}

那么 .Count() 所有列表或数组的方法都从 1 开始,而 IT 世界中的索引总是从 0 开始。所以在最后,你的计数将达到一个不会'不会出现在您的索引中。

所以尝试BviLLe_Kid的建议并减去1。

编辑

好吧,算了。我认为那是一个脑袋。但我认为没有必要删除这个答案,因为我可以看出 BviLLe_Kid 建议是错误的。

科学

    static void Main(string[] args)
    {
        List<string> tmpList = new List<string>();
        for (int i = 0; i < 10; i++)
        {
            Debug.WriteLine("List Item No" + i);
            tmpList.Add("Item " + i);
        }
        Debug.WriteLine("_____________");
        Debug.WriteLine("List Count: " +tmpList.Count());
        Debug.WriteLine("_____________");
        for (int i = 0; i < tmpList.Count(); i++)
        {
                Debug.WriteLine(tmpList[i]);
        }
    }

调试:

List Item No0

List Item No1

List Item No2

List Item No3

List Item No4

List Item No5

List Item No6

List Item No7

List Item No8

List Item No9


List Count: 10


Item 0

Item 1

Item 2

Item 3

Item 4

Item 5

Item 6

Item 7

Item 8

Item 9

ErrorItems.Item 方法似乎需要一个绝对索引,从 1 开始,所以将循环更改为:

for (int i = 1; i <= errors.Count; i++)

那么应该可以了。