Sto cercando di imparare tutti i nuovi extra forniti con C# 4.0. Non riesco a capire le differenze tra i tipi DynamicObject
e ExpandoObject
. Sembra che DynamicObject
sia utilizzato per es. quando si desidera accedere alle variabili dagli script Python e ExpandoObject
quando si parla con oggetti COM/Office. Ho ragione? Qual è la differenza nel loro uso?C# 4.0 Dinamico vs Expando ... dove si adattano?
risposta
Expando è un tipodynamic
a cui i membri possono essere aggiunti (o rimossi) in fase di esecuzione. dynamic
è progettato per consentire a .NET di interagire con i tipi durante l'interfaccia con linguaggi di dattilografia dinamici come Python e JavaScript.
Quindi, se avete bisogno di gestire un tipo dinamico: utilizzare dynamic
e se avete bisogno per gestire i dati dinamici come XML o JSON: utilizzare ExpandoObject
La dichiarazione di un expando mostra la relazione tra dinamica e l'expando :
dynamic expando = new ExpandoObject();
E la possibilità di aggiungere una nuova proprietà:
expando.SomeNewStringVal = "Hello World!";
l'ultima riga di codice crea una nuova stringa di pro perty nell'oggetto expando chiamato SomeNewStringVal
. Il tipo di stringa viene dedotto dal compito.
Quindi un expando è un tipo di dati dinamico che può rappresentare dati che cambiano dinamicamente. Questo è tutto sommato. Here's a deeper look at dynamic and expando.
Esempio completo:
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);
}
}
Anche se egli lo ha accolto, mi penso che l'OP significasse differenza tra DynamicObject e ExpandoObject. – nawfal
Solo per notare questo è utile nel tempo nel mondo reale. Ho appena usato API per creare oggetti di risposta dyanmic prima di serializzarli su xml o json. In questo modo posso aggiungere ricorsivamente sottoclassi con nomi di proprietà distinti senza dover definire una tonnellata di proprietà esplicite. "GroupsL1": [{"GroupingL2 :: [{... – user2326106
[' DynamicObject'] (https://docs.microsoft.com/en-us/dotnet/api/system.dynamic.dynamicobject?view=netframework- MSDN: * Fornisce una classe base per specificare il comportamento dinamico in fase di esecuzione Questa classe deve essere ereditata da, non è possibile creare un'istanza direttamente. * La pagina MSDN contiene un'implementazione 'ExpandoObject' semplificata basata su' DynamicObject'. Quindi, entrambi i tipi vengono utilizzati con l'associazione tardiva, ma 'ExpandoObject' è concreto (e sigillato), mentre' DynamicObject' è solo una classe base per oggetti dinamici personalizzati. – Palec
risposte meglio qui: http://stackoverflow.com/questions/3565481/differences-between-expandoobject-dynamicobject-and-dynamic –