IndexOutOfRangeException при доступе к атрибутам через массив строк? - PullRequest
0 голосов
/ 13 марта 2009

У меня есть древовидное представление, отображаемое на winform.Now, когда я нажимаю на xmlnode в древовидном представлении, его атрибуты отображаются в списке. Теперь я разделил всю логику в пользовательском интерфейсе и серверной части. Теперь я хочу, чтобы мой внутренний класс содержал метод для отображения атрибутов (имя и значение) выбранного узла xml, которые хранятся в массиве и возвращаются в виде строки моему внешнему классу в событии treev_AfterSelect. Как я могу это сделать? Мне нужно сохранить атрибуты узла, я нажимаю на winform в массиве строк и отображать в listbox. Вот код, который у меня есть для моего класса Backhand enter code here

public  string[] selectedNode(XmlNode eventNode)
    {
        XmlAttributeCollection attCol = eventNode.Attributes;
        string[] strArray = new string[attCol.Count];
         if (attCol != null)
            for( int i = 0; i <= attCol.Count;i++)
            {  strArray[i] = "Attribute name: " + attCol[i].Name+","+" Attribute value: " + attCol[i].Value;//IndexOutOfRange Exception
                    }
            return strArray;
    } 

Здесь я получаю исключение IndexOutOfRangeException: индекс, который передается, находится вне диапазона. на этой линии

strArray[i] = "Attribute name: " + attCol[i].Name+","+" Attribute value: " + attCol[i].Value;

Класс My Front end (UI) содержит этот код для извлечения атрибута и значений, отображения это в списке.

private void treeView1_AfterSelect(object sender, System.Windows.Forms.TreeViewEventArgs e)
    {
        classObj = new MytreeNodeClass();
       listBox1.Items.Clear();
        XmlNode xNode = e.Node.Tag as XmlNode;
        string[] arrStr = classObj.selectedNode(xNode); 
        listBox1.Items.Add(arrStr); //Is this the correct syntax to retrieve the data in listbox??
     }

Не могли бы вы помочь, где я не так ?? Что и куда поместить, чтобы точно удалить исключение и успешно выполнить код? Я не хочу, чтобы Treenode использовался в заднем плане. Спасибо ....

1 Ответ

4 голосов
/ 13 марта 2009

Вы слишком далеко зашли в петле.

for( int i = 0; i <= attCol.Count;i++)

должно быть

for( int i = 0; i < attCol.Count;i++)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...