C# LINQ到resx文件?
我正在尝试构建一种方法,以便在运行时在给定的C# LINQ到resx文件?,c#,linq,ienumerable,iqueryable,resx,C#,Linq,Ienumerable,Iqueryable,Resx,我正在尝试构建一种方法,以便在运行时在给定的.resx文件中获取给定文本段的密钥 目前,我可以打开并读取该文件(使用ResXResourceReader),但我必须使用foreach浏览整个文件 这可能是一个性能问题,因为我们的一些.resx文件相当大(大约2000个字符串),我们可能经常这样做 我想使用linqto对象来查询这个,因为我假设where方法是相对优化的,但是我无法这样做。ResXResourceReader类有两个方法AsQueryable()和GetEnumerator(),但
.resx
文件中获取给定文本段的密钥
目前,我可以打开并读取该文件(使用ResXResourceReader
),但我必须使用foreach
浏览整个文件
这可能是一个性能问题,因为我们的一些.resx
文件相当大(大约2000个字符串),我们可能经常这样做
我想使用linqto对象来查询这个,因为我假设where
方法是相对优化的,但是我无法这样做。ResXResourceReader
类有两个方法AsQueryable()
和GetEnumerator()
,但都不允许对其结果使用LINQ(因此从reader.AsQueryable()中的n开始,其中
失败)
我如何才能对ResXResourceReader提供的内容进行LINQ,或者它是否值得花时间?您是否考虑过只做一些预处理
您可以加载Resx文件,然后在键值对上循环,然后将它们反向存储在哈希表中(即哈希表中的键实际上是资源的值,哈希表中的值是资源的键)。那么value->key的翻译就会很快。唯一需要考虑的是如何处理重复项(具有相同值的多个资源)。您是否考虑过只进行一些预处理
您可以加载Resx文件,然后在键值对上循环,然后将它们反向存储在哈希表中(即哈希表中的键实际上是资源的值,哈希表中的值是资源的键)。那么value->key的翻译就会很快。唯一需要考虑的是如何处理重复项(具有相同值的多个资源)。这真的不值得花时间。LINQ没有任何方法可以比您更高效地搜索.resx文件。根据内存使用情况以及缓存数据是否对您有意义,您可能最好将整个文件读入
字典
,并以这种方式进行查找
当然,您可以创建自己的tuplet对象来存储一个键/值对,并将整个文件读入其中的一个列表,然后允许LINQ-to对象进行查询,但这不会像
字典那样快,需要更多的开销。这真的不值得您花时间。LINQ没有任何方法可以比您更高效地搜索.resx文件。根据内存使用情况以及缓存数据是否对您有意义,您可能最好将整个文件读入字典
,并以这种方式进行查找
当然,您可以创建自己的tuplet对象来存储一个键/值对,并将整个文件读入这些元素的列表中,然后允许LINQ-to对象进行查询,但是这不会像字典那样快,需要更多的开销。以下代码返回一个IEnumerable对象,允许您使用LINQ查询资源文件的内容:
ResXResourceReader reader = new ResXResourceReader(myfile);
IEnumerable<DictionaryEntry> enumerator = reader.OfType<DictionaryEntry>();
ResXResourceReader=新的ResXResourceReader(myfile);
IEnumerable枚举数=reader.OfType();
以下代码返回一个IEnumerable对象,允许您使用LINQ查询资源文件的内容:
ResXResourceReader reader = new ResXResourceReader(myfile);
IEnumerable<DictionaryEntry> enumerator = reader.OfType<DictionaryEntry>();
ResXResourceReader=新的ResXResourceReader(myfile);
IEnumerable枚举数=reader.OfType();
我之所以接受这一点,是因为它是有效的,而且它确实最正确地回答了我眼前的问题。然而,我将考虑其他的回答,我们可能不会实际使用这个。我接受这个,因为它是有效的,它确实最正确地回答了我的直接问题。然而,我将考虑其他的反应,我们可能最终不会实际使用这个。