将CustomClassObjects作为值添加到Dictionary

时间:2016-11-30 01:03:44

标签: c# dictionary

我有一个任务,我需要为Dictionary中的一个键设置两个值。 在web中找到的解决方案是创建具有两个字段的新类,并将其作为值使用它。

但是如何从Dictionary&for;循环中为我的CustomClassObjects赋值? 这是代码:

Dictionary<char, Huffmans> HuffmanDictionary = new Dictionary<char, Huffmans>();
        Program.text = File.ReadAllText(Program.sourcetext);
        char character;
        for (int i = 0; i < Program.text.Length; i++)
        {
            counter++;
            character = Convert.ToChar(Program.text[i]);
            if (HuffmanDictionary.ContainsKey(character))
                HuffmanDictionary[character].probability++;
            else
                HuffmanDictionary.Add(character, 1);// here is the problem, obviously program can't assign value directly to class... 
        }
public class Huffmans
{
    public int code = 0;
    public double probability = 0;
}    

基本上,我只需要分配&#34;概率&#34;这一步的价值观。我应该打电话给#34; Huffmans&#34;在每次迭代?

非常感谢任何帮助,Alex

1 个答案:

答案 0 :(得分:1)

您需要在添加值之前实例化您的类:

HuffmanDictionary.Add(character, 1);

应该是:

HuffmanDictionary.Add(character, new Huffmans{ code = 1 });

或者,您可以为您的类创建构造函数:

public class Huffmans
{
    public Huffmans(int _code)
    {
       code = _code;
    }

    public int code = 0;
    public double probability = 0;
}  

然后你可以这样做:

 HuffmanDictionary.Add(character, new Huffmans(1));

修改    更多澄清:

HuffmanDictionary.Add(character, 1);

失败,因为您将类型int传递到字典中,但期望类型为Huffmans。我们的字典是:Dictionary<char,Huffmans>()

HuffmanDictionary.Add(character, new Huffmans{ code = 1 }); 

有效,因为现在我们正在创建Huffmans类型的对象,我们将code value设置为1.

不确定我是否正确理解了您的评论,但实际上我们的做法与:

相同
var newHuffmans = new Huffmans{ code = 1 };
HuffmanDictionary.Add(character, newHuffmans);

但是我们不是写出所有代码并使用我们的类创建命名变量,而是跳过它并将其直接传递到字典中。