Domanda

Sto cercando di capire il tipo DynamicObject. Ho trovato questo articolo di MSDN di essere molto conciso e chiaro come creare e utilizzare DynamicObject:

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

L'articolo contiene una semplice classe che eredita da DynamicDictionary DynamicObject.

Ora voglio iterare sulle mie proprietà DynamicObject creati dinamicamente:

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;
}

Ovviamente questo non funziona. Voglio imparare come fare questo senza un cambiamento nella mia classe DynamicDictionary, dal momento che sto davvero cercando di imparare ad usare questo per tutti i tipi di oggetti esistenti che eredita da DynamicObject.

E 'la riflessione necessaria? Devo mancare qualcosa ...

È stato utile?

Soluzione

Altri suggerimenti

Credo che si sarebbe interessato al ExpandoObject di classe. La classe DynamicObject è solo una base di dove si sta lo scopo di fornire tutta la logica. Esso implementa in modo esplicito l'interfaccia IDictionary<string, object> in modo da potervi accedere le proprietà o aggiungerne di nuovi in ??questo modo.

// 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);

Avevo appena reso conto che si sta implementando la classe DynamicDictionary e incompreso tua domanda. Siamo spiacenti.

Quando viene utilizzato con un riferimento dinamico, si ha accesso solo ai membri esposti pubblicamente. Poiché solo Count è dichiarata pubblica (oltre gli altri membri DynamicObject), avresti bisogno di utilizzare la riflessione al fine di accedere al dizionario interno facilmente ottenere quei valori (se non si intende apportare ulteriori modifiche).

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top