LINQ to resx file? - PullRequest
       16

LINQ to resx file?

0 голосов
/ 05 мая 2009

Я пытаюсь найти способ получить ключ для данного фрагмента текста в указанном файле .resx во время выполнения.

В настоящее время я могу открыть и прочитать файл (используя ResXResourceReader), но мне нужно использовать foreach, чтобы просмотреть весь файл.

Это может быть проблема с производительностью, так как некоторые из наших .resx файлов довольно большие (порядка 2000 строк), и мы можем делать это часто.

Я бы хотел использовать LINQ to Objects для запроса этого, так как я предполагаю, что метод where относительно оптимизирован, однако я не смог этого сделать. Класс ResXResourceReader имеет два метода AsQueryable() и GetEnumerator(), но ни один из них не позволяет LINQ сопоставлять их результат (таким образом, from n in reader.AsQueryable() where терпит неудачу).

Как я могу LINQ против чего-то, предоставленного ResXResourceReader, или это даже стоит времени?

Ответы [ 3 ]

2 голосов
/ 05 мая 2009

Следующий код возвращает объект IEnumerable, который позволяет использовать LINQ для запроса содержимого файла ресурса:

ResXResourceReader reader = new ResXResourceReader(myfile);
IEnumerable<DictionaryEntry> enumerator = reader.OfType<DictionaryEntry>();
1 голос
/ 05 мая 2009

Это действительно не стоит вашего времени. У LINQ нет никаких средств для поиска вашего файла .resx более эффективно, чем вы могли бы. В зависимости от использования памяти и того, имеет ли для вас смысл кэширование данных, вам, вероятно, будет лучше прочитать весь файл в Dictionary<TKey,TValue> и выполнить поиск таким образом.

Конечно, вы можете создать свой собственный объект tuplet для хранения пары ключ / значение и прочитать весь файл в их список, а затем разрешить LINQ для объектов выполнять ваши запросы, но это не так быстрый как Dictionary и потребует больше накладных расходов.

1 голос
/ 05 мая 2009

Рассматривали ли вы просто предварительную обработку?

Вы можете загрузить файл Resx, затем выполнить цикл по парам ключ-значение и затем сохранить их в обратном порядке в хеш-таблице (т. Е. Ключ в хеш-таблице фактически является значением ресурса, и значение в хеш-таблице является ключом ресурса). Тогда переводы value-> key будут быстрыми. Единственная проблема заключается в том, как вы обрабатываете дубликаты (несколько ресурсов с одинаковым значением).

...