IEnumerable не поддерживает доступ по ключу (словарь ["что-то") в вашем коде) для доступа к данным таким образом, что вам необходимо, чтобы свойство словаря было классом IDictionary. Что-то вроде:
private IDictionary<string, object> dictionary;
Тогда вам нужно будет проанализировать данные, которые вы извлекаете из сборки, чтобы заполнить словарь:
Assembly asm = Assembly.GetExecutingAssembly();
Stream resourceStream = asm.GetManifestResourceStream("MagicBeans");
dictionary = new Dictionary<string, object>();
using (ResourceReader r = new ResourceReader(resourceStream))
{
foreach(DictionaryEntry entry in r.OfType<DictionaryEntry>())
{
dictionary.Add(entry.Key.ToString(), entry.Value);
}
}
Наконец, свойства не нуждаются в вызове Value:
public string Something { get { return dictionary["Something"]; }}
public string ThatThing { get { return dictionary["ThatThing"]; }}
Эти свойства будут вызывать исключение, если ключ отсутствует в словаре, поэтому вы можете сначала проверить это.
Ваше решение LINQ также должно работать, но за счет перечисления списка для поиска правильной записи при каждом запросе свойства.