J'essaie d'apprendre tous les nouveaux goodies qui viennent avec C # 4.0. Je n'arrive pas à comprendre les différences entre les types DynamicObject
et ExpandoObject
. Il semble que DynamicObject
soit utilisé par exemple lorsque vous souhaitez accéder à des variables à partir de Python et ExpandoObject
lorsque vous parlez avec des objets COM/Office. Ai-je raison? Quelle est la différence dans leur utilisation?
Expando est undynamic
type auquel les membres peuvent être ajoutés (ou supprimés) au moment de l'exécution. dynamic
est conçu pour permettre à .NET d'interagir avec des types lors de l'interfaçage avec des langages de frappe dynamiques tels que Python et JavaScript.
Donc, si vous devez gérer un type dynamique: utilisez dynamic
et si vous devez gérer des données dynamiques telles que XML ou JSON: utilisez ExpandoObject
La déclaration d'un expando montre la relation entre dynamique et expando:
dynamic expando = new ExpandoObject();
Et la possibilité d'ajouter une nouvelle propriété:
expando.SomeNewStringVal = "Hello World!";
Cette dernière ligne de code crée une toute nouvelle propriété de chaîne dans l'objet expando appelée SomeNewStringVal
. Le type de chaîne est déduit de l'affectation.
Un expando est donc un type de données dynamique qui peut représenter des données à changement dynamique. C'est tout en un mot. Voici un regard plus profond sur dynamique et expando .
Exemple complet:
using System;
using System.Dynamic;
class Program
{
static void Main(string[] args)
{
dynamic expando = new ExpandoObject();
expando.SomeNewStringVal = "Hello Brave New Whirrled!";
Console.WriteLine(expando.SomeNewStringVal);
// more expando coolness/weirdness:
var p = expando as IDictionary<String, object>;
p["A"] = "New val 1";
p["B"] = "New val 2";
Console.WriteLine(expando.A);
Console.WriteLine(expando.B);
}
}