2016-07-19 3 views
0

Я работаю над приложением, которое занимается списками. У меня два сценария; один, который имеет дело с определенным классом; и второй, который касается всего остального в приложении. Это настоящая и ложная игра/приложение, которое я изучаю в онлайн-учебнике.Как «Вопросы» в списке <Questions> относятся к «Т» в списке <T>?

Первый скрипт - это скрипт [System.Serializable], который содержит только строку и bool. Строка, в которой находится вопрос, и bool проверяет вопрос. Основной сценарий Game Controller делает массив вне класса, он также содержит список неотвеченных вопросов, которые будут периодически обновляться после того, как будет задан вопрос.

Строка кода я не совсем понимаю это

private static List<Questions> UnansweredQuestions; 

Где «Вопросы» класс, который содержит вопрос и логическое значение.

Какая функция выполняет именно <Questions>. Я знаю, что T в List<T> относится к типу элементов в списке; которые обычно являются строками или int. Как T определяется здесь как класс? Учитывая, что класс Questions содержит строку и bool, означает ли это, что созданный список является словарем?

+0

Я не уверен, что я понял, что вы имеете в виду, но список может быть списком всех, включая пользовательские классы (например, вопросы). Теперь список - это просто сумка, в этой сумке вы можете иметь шарики, монеты или даже другие меньшие сумки, которые содержат в себе другие предметы. –

+0

@Ghasan Не путать с 'System.Collections.Concurrent.ConcurrentBag ' (хотя они похожи) –

+0

@PCLuddite Спасибо! Я имел в виду концепцию этого, но приятно знать, что есть какой-то класс с таким именем :) –

ответ

1

Давайте разберем это вниз

private static List<Questions> UnansweredQuestions; 

Модификатор private доступа означает, что UnansweredQuestions будет виден только в пределах класса он определен в.

Ключевое слово static означает, что вы не нужен экземпляр вашего класса. Тот же UnansweredQuestions отображается всем экземплярам вашего класса и другим статическим свойствам/методам в классе.

Какая функция точно служит. Я знаю, что T в списке относится к типу элементов в списке; которые обычно являются строками или int.

List<T> означает список типа, который будет называться позже. Когда вы пишете List<Questions>, вы назовете этот тип. Вы говорите компилятору, что хотите список объектов «Вопросы».

Учитывая, что класс Questions содержит строку и bool, означает ли это, что созданный список является словарем?

Нет, это действительно список. Если у вас есть хотя бы один объект в списке, вы могли бы сделать что-то вроде

Questions firstQuestion = UnansweredQuestions[0]; 
if (firstQuestion.Answered == false) 
{ 
    Console.WriteLine(firstQuestion.Text); 
} 

Это предполагает, что ваша булево называется Ответил и ваш текст вопроса называется Text.

+0

Я люблю этот сайт уже :) все еще работает над тем, чтобы поверить, насколько он полезен на самом деле. Скажем гипотетически, если бы у меня был конструктор, который определял строку и int (на основе двух аргументов) и заполнял список такими, он принимал бы конструкторы в качестве элементов списка? – BowieSalvatore

+0

@BowieSalvatore Если «принять конструкторы» вы имеете в виду что-то вроде этого 'UnanswerQuestions.Add (новый вопрос (« Как вы? », 3));', то да. –

+0

Даже если у вас не было конструктора с двумя аргументами, вы можете использовать синтаксис следующим образом: 'UnansweredQuestions.Add (new Question() {Text =" Как вы? ", Answered = false});' –

2

No, List<Question> не словарь. Это List, которая содержит Question s.

List<T>, являющийся общим, означает, что он может принимать любые типы. Компилятор по существу берет код от List и заменяет все экземпляры T на Question, как если бы он был специально написан как список для Question типов.

В его основе List<T> хранит элементы в массиве, как private T[] _items. Затем этот массив изменяется каждый раз, когда заканчивается пробел.

1

Ссылка: https://msdn.microsoft.com/en-us/library/6sh2ey19(v=vs.110).aspx

Думай об этом как множественный T. Подобно Array<T>. T может быть любого типа: INT, строка Вопрос класс и т.д. Для бывших:

Question question1 = new Question(); // only 1 question 

List<Question> questions = new List<Question>(2); 
questions.Add(new Question()); // 1st question added 
questions.Add(new Question()); // 2nd question added 

// access the second question by: 
Question secondQuestion = questions[1]; 
0

<T> является object, которая является основой всего, что как этот List<System.Object>. Когда вы объявляете List<string>, он создает список, используя класс System.String.

Этот код: private static List<Questions> UnansweredQuestions;, создает список, используя класс Question.

Так этот код:

private static List<Question> UnansweredQuestions = new List<Question>(10); 

Создает 10 длинный список, используя Question класс. Который подобен Array:

private static Question[] UnansweredQuestions = new Question[10]; 

List 's и Array' s сэкономить пространство и время, так что вам не придется использовать что-то вроде этого:

private static Question UnansweredQuestion1 = new Question(); 
private static Question UnansweredQuestion2 = new Question(); 
private static Question UnansweredQuestion3 = new Question(); 
private static Question UnansweredQuestion4 = new Question(); 
private static Question UnansweredQuestion5 = new Question(); 
private static Question UnansweredQuestion6 = new Question(); 
private static Question UnansweredQuestion7 = new Question(); 
private static Question UnansweredQuestion8 = new Question(); 
private static Question UnansweredQuestion9 = new Question(); 
private static Question UnansweredQuestion10 = new Question(); 

Plus List «S и Array позволяет индексировать, так что вы можете получить такой предмет: MyListOrArray[4]. Который вернет элемент по этому индексу. Если в приведенном выше примере, где есть 10 переменных, вам нужно будет получить их значения по отдельности, например, UnansweredQuestion4.

Смежные вопросы