我有一长串由MP4Box生成的语言及其各自的代码 ( http://pastebin.com/rn4JbTtP ) 。我想将此列表加载到 C# 中的某种键值存储中(如字典),以便用户能够从组合框中选择一种语言,并且程序将返回相应的语言代码。
有什么方法可以在每次运行程序时不读取文本文件的情况下完成?如果是这样,怎么做?
更新(如此处评论):对不起,我没有清楚地解释自己。我阅读文本文件没有问题,只是当前格式需要大量解析才能输入字典。存储这些对的最佳方式是什么,以便在运行时需要最少的解析量?
我有一长串由MP4Box生成的语言及其各自的代码 ( http://pastebin.com/rn4JbTtP ) 。我想将此列表加载到 C# 中的某种键值存储中(如字典),以便用户能够从组合框中选择一种语言,并且程序将返回相应的语言代码。
有什么方法可以在每次运行程序时不读取文本文件的情况下完成?如果是这样,怎么做?
更新(如此处评论):对不起,我没有清楚地解释自己。我阅读文本文件没有问题,只是当前格式需要大量解析才能输入字典。存储这些对的最佳方式是什么,以便在运行时需要最少的解析量?
无论如何,您都必须在应用程序启动时读取该文件。一种解决方案可能是创建一个包含您的语言的 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"},
};
}
}