将键值对列表加载到组合框中

时间:2012-07-19 17:48:06

标签: c# visual-studio-2010 key-value

我有一长串语言及其各自的代码(http://pastebin.com/rn4JbTtP),由MP4Box生成。 我想将此列表加载到C#中的某种键值存储(如字典)中,这样用户就可以从组合框中选择一种语言,程序将返回相应的语言代码。

有没有什么办法可以在每次运行程序时不读取文本文件?如果是这样,怎么样?

更新(评论为here抱歉,我没有清楚地解释自己。我对阅读文本文件没有任何问题,只是当前格式需要大量解析才能输入字典。存储这些对的最佳方法是什么,以便在运行时需要最少量的解析?

2 个答案:

答案 0 :(得分:0)

  

有没有办法在每次运行程序时不读取文本文件就可以完成?

不是真的。数据需要以某种方式加载到内存中。作为@lc commented,除了将字典硬编码到应用程序代码之外,您还需要存储并阅读它。

您可以通过多种方式存储数据以供阅读,但需要将其读入内存:

  • 保存到本地文本文件
  • 序列化为本地文件
  • 使用嵌入式数据库存储数据

更新

看到你想用最少的解析加载本地数据,我建议你数据解析成字典后,你{@ 3}}字典到磁盘。从磁盘反序列化时,您将拥有一个填充的字典实例。

答案 1 :(得分:0)

在启动应用程序时,您仍然必须阅读该文件。 一种解决方案可能是创建一个包含您的语言的xml文件,如下所示:

<?xml version="1.0" encoding="utf-8" ?>
<Languages>
  <Language Name="English" Code="en"/>
  <Language Name="German" Code="de"/>
</Languages> 

您还可以使用一个小类来保存语言的名称和代码,如下所示:

 class Language
    {
        public string Name { get; set; }
        public string Code { get; set; }
    }

和阅读所有语言的阅读方法:

 private static List<Language> ReadLanguageFile()
        {
            List<Language> languages = new List<Language>();
            string path = @"LanguagesFile.xml";
            XDocument xdoc = XDocument.Load(path);
            var lans = xdoc.Root.Elements("Language");
            Language lan;
            foreach (var item in lans)
            {
                lan = new Language();
                lan.Name = item.Attribute("Name").Value;
                lan.Code = item.Attribute("Code").Value;
                languages.Add(lan);
            }
            return languages;
        }

然后您可以将组合框数据源绑定到语言列表,如下所示:

cmb.DataSource = ReadLanguageFile();
cmb.DisplayMember="Name";
cmb.ValueMember="Code";

现在,如果你不想为语言创建一个文件,你可以创建一个类来保存你所有的语言:

public sealed class Languages
    {
        public static List<Language> GetLanguages()
        {
            return new List<Language>
            {
                new Language{Code="en",Name="English"},
                new Language{Code="de",Name="German"},
            };
        }
    }