使用C#从文件加载字典

本文关键字:加载 字典 文件 使用 | 更新日期: 2023-09-27 18:29:46

我有字典。首先我初始化它们。

    public Dictionary<string, Bitmap> lookup;
    public Dictionary<string, Bitmap> lookup2;
    public Dictionary<string, Bitmap> lookup3;

然后在button_click事件中加载字典。

    private void button2_Click_1(object sender, EventArgs e)
    {
    lookup = new Dictionary<string, Bitmap>();
    Bitmap l1 = new Bitmap(@"C:'1'1.bmp", true); lookup.Add("1", l1);
    // add hundreds more
    }

问题是,这段代码几乎占据了我主文件空间的一半,所以我想创建一个单独的文件来从中加载字典

所以我尝试创建一个单独的类(cs)文件:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Drawing;
namespace getDictData
{
    class mydict
    {
        public static void loadDict()
        {
            Dictionary<string, Bitmap> lookup = new Dictionary<string, Bitmap>();
            Bitmap l1 = new Bitmap(@"C:'1'1.bmp", true); lookup.Add("1", l1);
        }
    }
}

在主文件中我添加了:

using getDictData

并像这样使用:

 private void button2_Click_1(object sender, EventArgs e)
 {
 mydict.loadDict();
 }

似乎什么都不起作用。。那么如何使用C#从不同的文件加载方法

EDIT:我正在使用此代码检查是否有东西加载到字典中:

    private void button8_Click(object sender, EventArgs e)
    {
        var targer = lookup.ToList(); // error is thrown here
        string s = targer[0].Key;
        textBox6.Text = "" + s;
    }

无论我如何更改代码,结果总是为null。

"值不能为null。参数名称:源"

如果我从主文件中删除字典初始化,我就会得到

"名称'lookup'在当前上下文中不存在"

使用C#从文件加载字典

您所面临的麻烦是微不足道的。事实上,你可以在不同的文件、类等中编写函数,这就是必须做到的。如果你尝试一下,肯定会奏效。

public Dictionary<string, Bitmap> lookup;
public Dictionary<string, Bitmap> lookup2;
public Dictionary<string, Bitmap> lookup3;
 private void button2_Click_1(object sender, EventArgs e)
 {
     lookup = mydict.loadDict(); //now that you have loaded it.
 }

你的课程应该是:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Drawing;
namespace getDictData
{
    class mydict
    {
        public static Dictionary<string, Bitmap> loadDict()
        {
            Dictionary<string, Bitmap> lookup = new Dictionary<string, Bitmap>();
            Bitmap l1 = new Bitmap(@"C:'1'1.bmp", true); lookup.Add("1", l1);
            return lookup;
        }
    }
}

现在,

private void button8_Click(object sender, EventArgs e)
{  
    var targer = lookup.ToList(); //hopefully lookup is not null anymore    
    if (lookup.Count == 0) //or whatever way you want to validate depending upon the indexing u use
    {
         MessageBox.Show("No valid items"); //or something similar that you dont get index out of bound exception.
         return;
    }
    string s = targer[0].Key;
    textBox6.Text = "" + s;
}

编辑:我想只有几个字典要加载。你可以这样做来回答你的问题,但一点也不优雅。

1) 从字典加载类返回字典列表:

你的字典加载类:

   class mydict
   {
       public static List<Dictionary<string, Bitmap>> loadAllDicts()
       {
           List<Dictionary<string, Bitmap>> lookups = new List<Dictionary<string, Bitmap>>();
            Dictionary<string, Bitmap> lookup1 = new Dictionary<string, Bitmap>();
            Bitmap l1 = new Bitmap(@"C:'1'1.bmp", true); 
            lookup1.Add("1", l1);
            lookups.Add(lookup1);
            Dictionary<string, Bitmap> lookup2 = new Dictionary<string, Bitmap>();
            Bitmap l2 = new Bitmap(@"C:'1'1.bmp", true); 
            lookup2.Add("1", l2);
            lookups.Add(lookup2);
            //etc
            return lookups;
        }
    }

2) 然后

   private void button2_Click_1(object sender, EventArgs e)
   {
        List<Dictionary<string, Bitmap>> lookups = mydict.loadAllDicts();
        lookup = lookups[0];
        lookup2 = lookups[1];
        lookup3 = lookups[2];
   }

问题是Dictionary<string, Bitmap> lookup = new Dictionary<string, Bitmap>();是在静态方法loadDict()中定义的,并且没有对外部的引用。你将如何获得这些数据?您可以将属性添加到mydict类中。

class mydict
{
    public static Dictionary<string, Bitmap> MyLookup { get; private set; }
    public static void loadDict()
    {
                    MyLookup.Clear();
        Bitmap l1 = new Bitmap(@"C:'1'1.bmp", true);
        MyLookup.Add("1", l1);
    }
}

现在,调用mydict.loadDict();,然后可以通过访问位图

mydict.MyLookup

或者使用带有返回值的函数。

 public static Dictionary<string, Bitmap> loadDict()
        {
                    var dict = new Dictionary<string, Bitmap>();
            Bitmap l1 = new Bitmap(@"C:'1'1.bmp", true);
            dict .Add("1", l1);
                    return dict;
        }