Ошибка общего списка при настройке табличного представления в Visual Studio - PullRequest
1 голос
/ 11 октября 2019

Я пытаюсь работать с табличным представлением в Xcode и Visual studio и настраиваю его для импорта данных, но получаю сообщение об ошибке в списке.

using System.Collections.Generic;
using AppKit;

namespace HCATester
{
    public class NormsLogDataSource : NSTableViewDataSource
    {
        public NormsLogDataSource(){}

        public List Norms = new List();
        public override nint GetRowCount(NSTableView tableView)
        {
            return Norms.Count;
        }
    }
}

Всякий раз, когда я выбираючтобы увидеть, что не так, вот что я получаю:

Реализует интерфейс System.Collections.Generic.IList. Размер списка динамически увеличивается по мере необходимости. Список не гарантируется для сортировки. Программист несет ответственность за сортировку списка перед выполнением операций (таких как BinarySearch), которые требуют сортировки списка. Операции индексирования должны выполняться в постоянное время доступа;то есть O (1).

1 Ответ

0 голосов
/ 11 октября 2019

Ваша проблема с объявлением вашего List. Вы используете пространство имен System.Collections.Generic, которое (среди других коллекций) содержит универсальный List<T>. Но вы не указываете параметр универсального типа.

Видите ли, до того, как у нас появились универсальные шаблоны, мы использовали ArrayList, который просто содержал коллекцию objects, поэтому нам всегда нужно приводить его кчто мы на самом деле хотели. Например, если мы хотим получить массив целых чисел ArrayList, мы могли бы объявить наш список следующим образом:

ArrayList list = new ArrayList();
list.Add(1);
list.Add(2);
list.Add(3);

Но при его использовании нам потребуется преобразовать наш элемент из object в любой тип, который мы хотели бы, например, так:

int item1 = (int) list[0];
int item2 = (int) list[1];
// ...

Это сбивает с толку и может привести к ошибкам, например, если метод принимает ArrayList в качестве параметра, вам всегда нужно убедиться, что каждый элемент указанного ArrayList имеет правильный тип.
В комплекте Generics и generic List<T>, с его помощью мы можем определить строго типизированный List. Тот же пример, что и выше, но использование List намного проще для чтения и понимания:

List<int> list = new List<int>();
list.Add(1);
list.Add(1);
list.Add(1);

int item1 = list[0];
int item2 = list[1];
// ...

Теперь нам не нужно приводить наш объект, так как мы уже знаем, какой это тип данных. Это также добавляет намного больше безопасности, поскольку мы можем определить, какие типы допустимы в Списке.

Теперь, чтобы ответить на ваш вопрос, вам нужно указать тип данных, который вы используете, вы сказали string, поэтому я 'покажу как. Все, что вам нужно сделать, это заменить строку, в которой вы объявляете Список, следующим образом:

public List<string> Norms = new List<string>();

PS часть generic () класса может читаться как "of" или "for", например List<T> будет читаться как «Список T», List<int> будет «Список целых чисел». И ViewModel<TView> будет читаться как «Модель представления для TView»

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...