在c#

时间:2017-05-14 06:11:59

标签: c# dictionary

我有一个被声明为属性的字典,以便我可以在其他函数和事件处理程序中访问它,但看到我是c#的新手,我无法弄清楚如何正确地执行此操作

声明字典

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

我有两个功能。第一个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;
}

第二个函数将用户输入wordSearch.Text与此字典occurenceDictionary进行比较,如果它们匹配,则会告诉用户该单词出现的次数(键是单词,值是发生的数量)。

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

现在我有一个等待用户点击Search按钮的事件监听器。这是我遇到的最麻烦的部分,我不知道如何在事件处理程序中正确调用我的word_search函数,因为我现在拥有它的方式,我总是得到{{{ 1}}它说修复它我必须添加

NullReferenceException但是将它添加到functionOne对我来说没有意义,因为我希望将项目添加到字典中,无论其是否为空,因为if(occurencesDictionary != null) ...正在填充字典。所以我不确定如何解决这个问题

如果有人能告诉我我做错了什么,或者可能会向我展示一个更有帮助的方法

3 个答案:

答案 0 :(得分:0)

  

...但是将它添加到functionOne对我来说没有意义,因为我希望将项目添加到字典中,无论其是否为空,因为functionOne正在填充字典。

Dictionary<string, int> occurrenceDictionary { get; set; } = new Dictionary<string, int>(); 不是空的,甚至没有初始化。

在使用之前,您将首先对其进行初始化 您可以在构造函数中执行此操作,也可以通过属性初始值设定项执行此操作:

{{1}}

答案 1 :(得分:0)

您只声明但从未初始化(使用new)您的哈希变量,因此它始终为null。

答案 2 :(得分:0)

你需要公共字典的出现字典=新的字典();

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