2017-05-14 4 views
0

他の関数やイベントハンドラ内でアクセスできるようにプロパティとして宣言されている辞書を持っていますが、C#辞書関数とイベントハンドラ内のプロパティ/フィールドへのアクセス#

Dictionary<string, int> occurrenceDictionary { get; set; } 

を宣言適切

これを行う方法を、私は2つの機能を持っています。最初のfunctionOneは、単語のリストをdictionary<string, int>に変換します。ここで、stringは単語です。intは、単語がリストに含まれる回数です。

public string functionOne(List<string> myList) 
{  
    foreach (string item in myList) 
    { 
     if (!occurrenceDictionary.ContainsKey(item)) 
     { 
      occurrenceDictionary.Add(item, 1); 
      } 
     else 
     { 
      occurrenceDictionary[item]++; 
     } 
    } 
    return maxKey; 
} 

第二の機能は、この辞書occurenceDictionaryへのユーザー入力wordSearch.Textを比較し、両者が一致する場合、ユーザーは、この言葉は(キーは言葉です、値が出現量です)が発生した回数を指示されます。

public int word_search(Dictionary<string, int> myDict) 
{ 
    if(myDict != null) 
    { 
     if (myDict.ContainsKey(wordSearch.Text)) 
     { 
      ... 
     } 
     else 
     { 
      ... 
     } 
    } 
    else 
    { 
     ... 
    } 
} 

ここで、ユーザーがSearchボタンをクリックするのを待っているイベントリスナーがあります。これは私が一番問題を抱えている部分ですが、word_searchをイベントハンドラの中で正しく呼び出す方法がわかりません。私は現時点での方法があるので、私はいつもNullReferenceExceptionを取得しています。それは私が追加しなければならない

if(occurencesDictionary != null) ...しかしこれをfunctionOneに追加するのは、functionOneが辞書に移入しているので、その項目が空であるかどうかにかかわらず、項目を辞書に追加したいからです。だから私は、誰もが私が間違っているのか、おそらく私に

+0

「occurrenceDictionary = new Dictionary 」を使用する前にどこでも呼びましたか? –

+0

いいえ、それは私の問題だったことが判明しました。私が言ったように、C# – user8009199

答えて

0

参考になるより簡単にする方法を示して...しかし、追加しているものを私に伝えることができれば、この問題

を回避する方法が他にわからないんだけどfunctionOneが空であるかどうかにかかわらず、ディクショナリにitemを追加したいからfunctionOneは私には意味がありません。

occurencesDictionaryは空ではありません。初期化されていません。

最初に初期化してから使用してください。
はどちらかあなたは、コンストラクタやプロパティ初期化子でそれを行う:

Dictionary<string, int> occurrenceDictionary { get; set; } = new Dictionary<string, int>(); 
0

あなただけ宣言されていますが、それは常にnullであるので、あなたのハッシュ変数(newで)初期化されません。

0

公開する必要があります。dictionary occurrenceDictionary = new Dictionary();

using System; 
using System.Collections.Generic; 
using System.ComponentModel; 
using System.Data; 
using System.Drawing; 
using System.Linq; 
using System.Text; 
using System.Windows.Forms; 

namespace WindowsFormsApplication1 
{ 
    public partial class Form1 : Form 
    { 
     public Form1() 
     { 
      InitializeComponent(); 
     } 

     public Dictionary<string, int> occurrenceDictionary = new Dictionary<string, int>(); 

     public string functionOne(List<string> myList) 
     { 
      string maxKey = ""; 

      foreach (string item in myList) 
      { 
       if (!occurrenceDictionary.ContainsKey(item)) 
       { 
        occurrenceDictionary.Add(item, 1); 
       } 
       else 
       { 
        occurrenceDictionary[item]++; 
       } 
      } 
      return maxKey; 
     } 
     public int word_search(Dictionary<string, int> myDict) 
     { 
      if(myDict != null) 
      { 
       if (myDict.ContainsKey(wordSearch.Text)) 
       { 

       } 
       else 
       { 

       } 
      } 
      else 
      { 

      } 
      return 1; 
     } 

     private void buttonSearch_Click(object sender, EventArgs e) 
     { 
      occurrenceDictionary.Add("hello", 1); 
     } 
    } 
} 
関連する問題