1

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

目前,我可以打开并读取文件(Using ResXResourceReader),但我必须使用 aforeach来查看整个文件。

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

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

我如何针对 LINQ 提供的东西进行 LINQ ResXResourceReader,或者它是否值得花时间?

4

3 回答 3

3

以下代码返回一个 IEnumerable 对象,该对象允许您使用 LINQ 查询资源文件的内容:

ResXResourceReader reader = new ResXResourceReader(myfile);
IEnumerable<DictionaryEntry> enumerator = reader.OfType<DictionaryEntry>();
于 2009-05-05T19:08:49.210 回答
1

您是否考虑过只进行一些预处理?

您可以加载 Resx 文件,然后遍历键值对,然后将它们反转存储在哈希表中(即哈希表中的键实际上是资源的值,而哈希表中的值是资源的键)。那么 value->key 的翻译会很快。唯一需要考虑的是如何处理重复项(具有相同值的多个资源)。

于 2009-05-05T18:44:43.230 回答
1

这真的不值得你花时间。LINQ 没有任何方法可以比您更有效地搜索 .resx 文件。根据内存使用情况以及缓存数据是否对您有意义,您最好将整个文件读入 aDictionary<TKey,TValue>并以这种方式进行查找。

当然,您可以创建自己的 tuplet 对象来存储键/值对并将整个文件读入这些列表,然后允许 LINQ to 对象进行查询,但这不会像Dictionary并且需要更多的开销。

于 2009-05-05T18:49:43.547 回答