Ваша проблема с объявлением вашего 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»