Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/300.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# LINQ到resx文件?_C#_Linq_Ienumerable_Iqueryable_Resx - Fatal编程技术网

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();

我之所以接受这一点,是因为它是有效的,而且它确实最正确地回答了我眼前的问题。然而,我将考虑其他的回答,我们可能不会实际使用这个。我接受这个,因为它是有效的,它确实最正确地回答了我的直接问题。然而,我将考虑其他的反应,我们可能最终不会实际使用这个。