Полагаю, вам будет интересен класс ExpandoObject
. Класс DynamicObject
- это просто база, где вы должны предоставить всю логику. Он явно реализует интерфейс IDictionary<string, object>
, так что вы можете получить доступ к его свойствам или добавить новые таким образом.
// declare the ExpandoObject
dynamic expObj = new ExpandoObject();
expObj.Name = "MyName";
expObj.Number = 1000;
// print the dynamically added properties
foreach (KeyValuePair<string, object> kvp in expObj) // enumerating over it exposes the Properties and Values as a KeyValuePair
Console.WriteLine("{0} = {1}", kvp.Key, kvp.Value);
// cast to an IDictionary<string, object>
IDictionary<string, object> expDict = expObj;
// add a new property via the dictionary reference
expDict["Foo"] = "Bar";
// verify it's been added on the original dynamic reference
Console.WriteLine(expObj.Foo);
Я только что понял, что вы реализуете класс DynamicDictionary
, и неправильно понял ваш вопрос. К сожалению.
При использовании с динамической ссылкой у вас есть доступ только к открытым членам. Поскольку только Count
объявлено общедоступным (помимо других DynamicObject
членов), вам нужно использовать отражение, чтобы получить доступ к внутреннему словарю, чтобы легко получить эти значения (если вы не собираетесь вносить какие-либо дополнительные изменения) .