Вопрос

Я пытаюсь понять тип DynamicObject. Нашел эту статью MSDN очень известной и понятной как создавать и использовать DynamicObject:

http://msdn.microsoft.com/en-us/library/system.dynamic.dynamicobject.aspx

Статья содержит простой класс Dynamicdictionary, который наследует от DynamicObject.

Теперь я хочу итерацию по своим динамически созданным свойствам DynamicObject:

dynamic d = new DynamicDictionary();
d.Name = "Myname";
d.Number = 1080;

foreach (var prop in d.GetType().GetProperties())
{
  Console.Write prop.Key;
  Console.Write prop.Value;
}

Очевидно, это не работает. Я хочу научиться делать это без изменений в моем классе DynamicDictionary, так как я действительно пытаюсь научиться использовать это для всех видов существующих объектов, которые наследуют от DynamicObject.

Нужно ли отражение? Я, должно быть, что -то упускаю ...

Это было полезно?

Решение

Вы пробовали DynamicDictionary.getDynamicMemberNames () метод? - http://msdn.microsoft.com/en-us/library/system.dynamic.dynamicobject.getdynamicmembernames.aspx

Другие советы

Я считаю, что вам будет интересно 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 Участники), вам нужно использовать отражение, чтобы получить доступ к внутреннему словаре, чтобы легко получить эти значения (если вы не собираетесь вносить какие -либо дальнейшие изменения).

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top