使用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'在当前上下文中不存在"
您所面临的麻烦是微不足道的。事实上,你可以在不同的文件、类等中编写函数,这就是必须做到的。如果你尝试一下,肯定会奏效。
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;
}