gpt4 book ai didi

c# - 使用 ResourceReader 创建资源的 HybridDictionary

转载 作者:行者123 更新时间:2023-11-30 22:50:02 25 4
gpt4 key购买 nike

我正在使用 ResourceReader 读取嵌入式 resx 资源,我想将其存储在类级别的成员变量中。我想将它存储为 HybridDictionary,但没有找到一种简单的方法。

类(class)成员

private IEnumerable<DictionaryEntry> dictionary;

类初始化

Assembly asm = Assembly.GetExecutingAssembly();
Stream resourceStream = asm.GetManifestResourceStream("MagicBeans");

using (ResourceReader r = new ResourceReader(resourceStream))
{
IEnumerable<DictionaryEntry> dictionary = r.OfType<DictionaryEntry>();
}

属性

public string Something { get { return dictionary["Something"].Value;  }} 
public string ThatThing { get { return dictionary["ThatThing"].Value; }}

然而,IEnumerable<DictionaryEntry>没有按照我喜欢的方式工作,我目前正在考虑做一些 LINQ 喜欢的事情; .First(x => x.Key=="Something").Value

最佳答案

IEnumerable 不支持按键访问(代码中的字典 ["something"] 部分),要以这种方式访问​​数据,您需要将字典属性设为 IDictionary 类。像这样的东西:

private IDictionary<string, object> dictionary;

然后您需要解析从程序集中提取的数据以填充字典:

Assembly asm = Assembly.GetExecutingAssembly();
Stream resourceStream = asm.GetManifestResourceStream("MagicBeans");

dictionary = new Dictionary<string, object>();

using (ResourceReader r = new ResourceReader(resourceStream))
{
foreach(DictionaryEntry entry in r.OfType<DictionaryEntry>())
{
dictionary.Add(entry.Key.ToString(), entry.Value);
}
}

最后,属性不需要 Value 调用:

public string Something { get { return dictionary["Something"];  }} 
public string ThatThing { get { return dictionary["ThatThing"]; }}

如果字典中不存在键,这些属性将抛出异常,因此您可能需要先检查一下。

您的 LINQ 解决方案也应该有效,但代价是每次请求属性时都要遍历列表以找到正确的条目。

关于c# - 使用 ResourceReader 创建资源的 HybridDictionary,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/777180/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com