LINQ to resx文件?

时间:2009-05-05 18:40:58

标签: c# linq ienumerable iqueryable resx

我正在尝试构建一种在运行时为给定.resx文件中的给定文本获取密钥的方法。

目前,我可以打开并阅读该文件(使用ResXResourceReader),但我必须使用foreach来覆盖整个文件。

这可能是一个性能问题,因为我们的一些.resx文件相当大(大约有2000个字符串),我们可能经常这样做。

我想使用LINQ to Objects来查询它,因为我认为where方法是相对优化的,但是我无法这样做。 ResXResourceReader类有两个方法AsQueryable()GetEnumerator(),但两者都不允许LINQ反对它们的结果(所以from n in reader.AsQueryable() where失败)。

如何针对ResXResourceReader提供的内容进行LINQ,还是值得花时间?

3 个答案:

答案 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并且需要更多开销。