2014-01-26 2 views
0

У меня есть файл ресурсов я захватить как это:словарь словарей

var rs = <somewhere>.FAQ.ResourceManager 
    .GetResourceSet(CultureInfo.CurrentUICulture, true, true); 

, и я хочу, чтобы разобрать его в словарь словарей, но я не могу понять, как совсем. это то, что я пытаюсь:

var ret = rs.OfType<DictionaryEntry>() 
    .Where(x => x.Key.ToString().StartsWith("Title")) 
    .ToDictionary<string, Dictionary<String, string>>(
    k => k.Value.ToString(), 
    v => rs.OfType<DictionaryEntry>() 
     .Where(x => x.Key.ToString().StartsWith(v.Value.ToString().Replace("Title", ""))) 
     .ToDictionary<string, string>(
     key => key.Value, 
     val => val.Value 
    ) 
); 

так, если я понимаю правильно, k следует обратиться к DictionaryEntry и, таким образом, я должен быть в состоянии разыменовать это как k.Value и изготовить свой словарь в каждом из внешнего словаря записи Я делаю другой запрос к файлу ресурсов, поэтому key и val также должны быть типа DictionaryEntry.

При ссылке val.Value Я получаю сообщение об ошибке «Невозможно выбрать метод из группы методов. Вы намеревались вызвать метод?» хотя это должно быть свойство, а не метод.

help?

p.s. в качестве объяснения, мой файл ресурсов выглядит вроде этого:

TitleUser: User Questions 
TitleCust: Customer Questions 
User1: Why does something happen? Because… 
User2: How do I do this? Start by… 
Cust1: Where can I find…? It is located at… 
Cust2: Is there any…? yes, look for it… 

, который означает, что я сначала получить список разделов (путем поиска всех ключей, которые начинаются с «Title») и для каждого я смотрю на список вопросов

+0

Боковое примечание: попробуйте разделить свой код на отдельные операторы или лучше на отдельные функции с хорошими именами ... Вы не сможете прочитать эту линию LINQ на следующий день. –

+0

О, да, спасибо за отрицательный рейтинг на моем посту, кто бы вы ни были. действительно полезно. – ekkis

ответ

1

поэтому ответ оказывается, что компилятор лучше знает, что касается типов. отказ от спецификаторов заставляет его работать, хотя я и не понял, почему мои спецификаторы ошибаются.

var ret = rs.OfType<DictionaryEntry>() 
    .Where(x => x.Key.ToString().StartsWith("Title")) 
    .ToDictionary(
    k => k.Value.ToString(), 
    v => rs.OfType<DictionaryEntry>() 
     .Where(x => x.Key.ToString().StartsWith(v.Key.ToString().Replace("Title", ""))) 
     .ToDictionary(
     x => x.Value.ToString().Split('?')[0] + "?", 
     x => x.Value.ToString().Split('?')[1] 
    ) 
); 

(Я внес некоторые изменения, чтобы заставить его делать то, что я намеревался сделать).

Смежные вопросы