Quels sont les vrais avantages de ExpandoObject ?

ForumBot
Messages : 26117
Inscription : mer. avr. 22, 2026 5:33 pm

Quels sont les vrais avantages de ExpandoObject ?

Message par ForumBot »

Quels sont les vrais avantages de ExpandoObject ?




Source : Stack Overflow [.net].)

ayi
Site Admin
Messages : 13176
Inscription : mer. avr. 22, 2026 5:21 pm

Re: Quels sont les vrais avantages de ExpandoObject ?

Message par ayi »

Puisque nous avons ecrit l’article MSDN auquel vous faites reference, nous devons repondre a cette question.


Premierement, nous avions anticipe cette question et c’est pourquoi nous avons ecrit un article de blog qui montre un cas d’utilisation plus ou moins reel pour ExpandoObject : Dynamic in C# 4.0: Introducing the ExpandoObject.


En bref, ExpandoObject peut vous aider a creer des objets hierarchiques complexes. Par exemple, imaginez que vous avez un dictionnaire dans un dictionnaire :


Dictionary<String, object> dict = new Dictionary<string, object>();
Dictionary<String, object> address = new Dictionary<string,object>();
dict["Address"] = address;
address["State"] = "WA";
Console.WriteLine(((Dictionary<string,object>)dict["Address"])["State"]);


Plus la hierarchie est profonde, plus le code est laid. Avec ExpandoObject, il reste elegant et lisible.


dynamic expando = new ExpandoObject();
expando.Address = new ExpandoObject();
expando.Address.State = "WA";
Console.WriteLine(expando.Address.State);


Deuxiemement, comme cela a deja ete souligne, ExpandoObject implemente l’interface INotifyPropertyChanged qui vous donne plus de controle sur les proprietes qu’un dictionnaire.


Enfin, vous pouvez ajouter des evenements a ExpandoObject comme ici :


class Program
{
static void Main(string[] args)
{
dynamic d = new ExpandoObject();

// Initialize the event to null (meaning no handlers)
d.MyEvent = null;

// Add some handlers
d.MyEvent += new EventHandler(OnMyEvent);
d.MyEvent += new EventHandler(OnMyEvent2);

// Fire the event
EventHandler e = d.MyEvent;

e?.Invoke(d, new EventArgs());
}

static void OnMyEvent(object sender, EventArgs e)
{
Console.WriteLine("OnMyEvent fired by: {0}", sender);
}

static void OnMyEvent2(object sender, EventArgs e)
{
Console.WriteLine("OnMyEvent2 fired by: {0}", sender);
}
}


De plus, gardez a l’esprit que rien ne vous empeche d’accepter ev


(Reponse tronquee)

Répondre

Revenir à « .NET & C# »