2016-05-12 11 views
0

任意の結果を印刷していないiが値である配列リストを印刷するトリング午前そしてC#ハッシュテーブルは、私はそれのために鍵を追加するC#でハッシュテーブルを作成してい

値として、私は配列リストを追加していそれは私が3つのprint文(Console.Write)を持っていますが、それらのどれも機能していない

using System; 

namespace text.cs 
{ 
    class Exec 
    { 
     static void Main(string[] args) 
     { 
      Hashtable variations_array = new Hashtable(); 
      ArrayList item_array = new ArrayList(); 
      item_array.Add ("one"); 
      item_array.Add ("two"); 
      variations_array.Add ("hi", item_array); 
      if (variations_array.Contains("one")) 
      { 
       Console.WriteLine("This student name is already in the list"); 
      } 

      foreach (DictionaryEntry entry in variations_array) 
      { 
       //Console.Write (entry.Key); 
       string sv = (entry.Key as string[])[ 0 ]; 
       Console.WriteLine("{0}",sv); 


      } 

      foreach (KeyValuePair<string, List<string>> pair in variations_array) 
      { 
       Console.WriteLine(pair.Key); 
       foreach (string item in pair.Value) 
        Console.WriteLine("\t" + item); 
      } 
     } 
    } 
} 

が動作していませんか?

どのように動作させるには?値"one"とキーの

+2

あなたはまだかなり '辞書<,>'と '一覧<>'よりも、非ジェネリックコレクションを使用している任意の理由は? –

+0

次の行を修正してください。string sv =(entry.Key as string); – jdweng

答えて

2

この条件をチェックします。存在しない

variations_array.Contains("one") 

- あなたは"hi"のキーを持つ単一のエントリを追加しました。だからあなたの最初のConsole.WriteLineは実行されません。

次へ:

string sv = (entry.Key as string[])[ 0 ]; 
Console.WriteLine("{0}",sv); 

キーは文字列配列ではありません - それは単一の文字列です。したがって、as演算子はnullを返し、NullReferenceExceptionを取得する必要があります。

次へ:

foreach (KeyValuePair<string, List<string>> pair in variations_array) 

これはDictionaryEntryKeyValuePair<string, List<string>>への暗黙のキャストを行っています。そのキャストは失敗します。したがって、あなたのコードが以前の問題のために例外をスローしなかった場合、ここで失敗するでしょう。

それは、我々はあなたが達成しようとしているものに本当に明確じゃないとしてこれを「修正」する方法を知るのは難しいが、私はが強くは、例えばList<T>Dictionary<TKey, TValue>(ジェネリックコレクションを使用して起動することができお勧めします)人生ははるかに簡単になる。

var dictionary = new Dictionary<string, List<string>>(); 
dictionary["hi"] = new List<string> { "one", "two" }; 
foreach (var entry in dictionary) 
{ 
    Console.WriteLine("Key: {0}", entry.Key); 
    Console.WriteLine("Values: {0}", string.Join(", ", entry.Value)); 
} 
+0

の代わりにこの文字列.Join( "、"、entry.Value)どうすれば配列の最初の要素を取得できますか? – Mounarajan

+0

@Mounarajan: 'entry.Value'は' List 'ですので、' List 'のドキュメントをご覧ください。あなたがしようとしていることの他の側面についてまだ疑問がある場合は、新しい(特定の)投稿で質問してください。 –

関連する問題