我正在尝试构建一种在运行时为给定.resx
文件中的给定文本获取密钥的方法。
目前,我可以打开并阅读该文件(使用ResXResourceReader
),但我必须使用foreach
来覆盖整个文件。
这可能是一个性能问题,因为我们的一些.resx
文件相当大(大约有2000个字符串),我们可能经常这样做。
我想使用LINQ to Objects来查询它,因为我认为where
方法是相对优化的,但是我无法这样做。 ResXResourceReader
类有两个方法AsQueryable()
和GetEnumerator()
,但两者都不允许LINQ反对它们的结果(所以from n in reader.AsQueryable() where
失败)。
如何针对ResXResourceReader
提供的内容进行LINQ,还是值得花时间?
答案 0 :(得分:2)
以下代码返回一个IEnumerable对象,该对象允许您使用LINQ查询资源文件的内容:
ResXResourceReader reader = new ResXResourceReader(myfile);
IEnumerable<DictionaryEntry> enumerator = reader.OfType<DictionaryEntry>();
答案 1 :(得分:1)
您是否考虑过进行一些预处理?
您可以加载Resx文件,然后遍历键值对,然后将它们颠倒存储在哈希表中(即哈希表中的键实际上是资源的值) ,并且哈希表中的值是资源的关键字)。那么value-&gt;键的翻译会很快。唯一的问题是如何处理重复项(具有相同值的多个资源)。
答案 2 :(得分:1)
这不值得你花时间。 LINQ没有任何方法可以比您更有效地搜索.resx文件。根据内存使用情况以及缓存数据是否对您有意义,您可能最好将整个文件读入Dictionary<TKey,TValue>
并以此方式进行查找。
当然,您可以创建自己的连音符对象来存储键/值对,并将整个文件读入这些对象的列表中,然后允许LINQ对象进行查询,但这不会是快于Dictionary
并且需要更多开销。