2016-07-19 5 views
0

私はリストを扱うアプリケーションに取り組んでいます。私は2つのスクリプトを持っています。特定のクラスを扱うもの。もう1つはアプリケーションの他のすべてを処理するものです。それは、私がオンラインチュートリアルを通して学ぶ真の偽のゲーム/アプリです。リスト内の "質問" <Questions>は、リスト<T>の "T"に関連していますか?

最初のスクリプトは文字列とboolだけを含む[System.Serializable]スクリプトです。ここの文字列は質問であり、ブールは質問を検証します。主なゲームコントローラスクリプトは、クラスからアレイを作成し、未回答の質問のリストを含んでいます。この質問のリストには、質問があったときに定期的に更新されます。

私はかなり得ることはありませんコードの行は、「質問」質問やブール値を含むクラスである

private static List<Questions> UnansweredQuestions; 

です。

<Questions>は正確にどのような機能を果たしますか?私はList<T>のTがリストの要素の型を参照していることを知っています。通常は文字列またはintです。 Tはここでどのように定義されていますか?質問クラスに文字列とブールが含まれていると仮定すると、作成されたリストは辞書であることを意味しますか?

+0

私はあなたが何を意味するのか分かりませんが、リストはカスタムクラス(質問など)のリストになります。今、リストは単なるバッグです。そのバッグには、ボール、コイン、またはそれ以外のアイテムを含む他の小さなバッグがあります。 –

+0

@Ghasan 'System.Collections.Concurrent.ConcurrentBag 'と混同しないでください(似ていますが) –

+0

@PCLudditeありがとう!私はそれのコンセプトを指していましたが、そのような名前のクラスがあることを知ってうれしいです:) –

答えて

1

さんがダウンし、アクセス修飾子privateUnansweredQuestionsだけそれを定義したクラスのスコープ内に表示されることを意味し

private static List<Questions> UnansweredQuestions; 

これを打破してみましょう。

キーワードstaticはあなたがいないことを意味しあなたのクラスのインスタンスが必要です。同じUnansweredQuestionsは、クラスのすべてのインスタンス、およびそのクラスの他の静的なプロパティ/メソッドに表示されます。

どの機能がサーブを正確に機能しますか。リスト内のTは、リスト内の要素のタイプを参照しています。通常は文字列またはintです。

List<T>は、後で名前を付けるタイプのリストを意味します。 List<Questions>と書くと、そのタイプの名前が付けられます。あなたは質問オブジェクトのリストをコンパイラに伝えます。

質問クラスに文字列とブールが含まれているとすれば、作成されたリストは辞書であることを意味しますか?

いいえ、それは本当にリストです。リストに少なくとも一つのオブジェクトを持っている場合は、あなたが

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

ような何かを行うことができますこれは、あなたのブールが回答と呼ばれ、あなたの質問のテキストはテキストと呼ばれている前提としています。

+0

私はこのサイトを既に愛しています:)それは実際にどのように役立つかを信じています。仮に、文字列とint(2つの引数に基づいて)を定義し、それらにリストを取り込んだコンストラクタがあれば、リストの要素としてコンストラクタを受け入れるでしょうか? – BowieSalvatore

+0

@BowieSalvatoreもし "コンストラクタを受け入れる"というのは、この 'UnanswerQuestions.Add(新しい質問)(どうですか?"、3)); 'のようなものを意味します。 –

+0

2つの引数コンストラクタがない場合でも、次のような構文を使用できます: 'UnansweredQuestions.Add(New Question(){Text =" How are you? "、Answered = false});' –

2

いいえ、List<Question>は辞書ではありません。 には、Questionが含まれています。

List<T>が一般的であるということは、どのタイプでも受け入れられることを意味します。コンパイラは基本的にListのコードをとり、Questionタイプのリストとして具体的に書かれたかのように、TのすべてのインスタンスをQuestionに置き換えます。

List<T>は、要素を配列に格納します(private T[] _items)。この配列は、スペースがなくなるたびにサイズが変更されます。

1

参考:複数のTさんのように、それのhttps://msdn.microsoft.com/en-us/library/6sh2ey19(v=vs.110).aspx

と思います。 Array<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>ようなものですすべてのベースは、あるあるTは、任意のタイプにすることができます。 List<string>を宣言すると、クラスSystem.Stringを使用してリストが作成されます。

このコード:private static List<Questions> UnansweredQuestions;は、Questionクラスを使用してリストを作成します。

ので、このコード:

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

Questionクラスを使用して、10長いリストを作成します。 Arrayのようにどちらである:

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

List年代とArray年代あなたはこのようなものを使用する必要はありませんので、空間と時間を節約:

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(); 

プラスList年代とArrayあなたはこのような項目を得ることができるので、インデックス作成を許可しますMyListOrArray[4]。そのインデックスでアイテムを返します。上記の例では、変数が10個ある場合は、UnansweredQuestion4のように個々の値を個別に取得する必要があります。

関連する問題