Comment une nouvelle dynamique de la Classe Anonyme?

En C# 3.0, vous pouvez créer la classe anonyme avec la syntaxe suivante

var o1 = new { Id = 1, Name = "Foo" };

Est-il un moyen de dynamique de création de ces anonymes de la classe d'une variable?


Exemple:

var o1 = new { Id = 1, Name = "Foo" };
var o2 = new { SQ = 2, Birth = DateTime.Now };

Dynamique créez Exemple:

var o1 = DynamicNewAnonymous(new NameValuePair("Id", 1), new NameValuePair("Name", "Foo"));
var o2 = DynamicNewAnonymous(new NameValuePair("SQ", 2), new NameValuePair("Birth", 
DateTime.Now));

Car j'ai besoin de le faire:

dynamic o1 = new ExpandObject(); 
o1."ID" = 1;    <--"ID" is dynamic name
o1."Name" = "Foo";  <--"Name" is dynamic name

Et Scene1:

void ShowPropertiesValue(object o)
{
  Type oType = o.GetType();
  foreach(var pi in oType.GetProperties())
  {
    Console.WriteLine("{0}={1}", pi.Name, pi.GetValue(o, null));
  }
}

si je l'appelle:

dynamic o1 = new ExpandObject();
o1.Name = "123";
ShowPropertiesValue(o1);

Il ne peut pas afficher le résultat:

Name = 123

Et aussi je comment Convertir le ExpandoObject à AnonymouseType ?

Type type = o1.GetType();
type.GetProperties();   <--I hope it can get all property of o1

Dernier, j'ai modifier ShowPropertiesValue() la méthode

void ShowPropertiesValue(object o)
{
  if( o is static object ) <--How to check it is dynamic or static object?
  {
    Type oType = o.GetType();
    foreach(var pi in oType.GetProperties())
    {
      Console.WriteLine("{0}={1}", pi.Name, pi.GetValue(o, null));
    }
  }
  else if( o is dynamic object )  <--How to check it is dynamic or static object?
  {
    foreach(var pi in ??? )  <--How to get common dynamic object's properties info ?
    {
      Console.WriteLine("{0}={1}", pi.Name, pi.GetValue(o, null));
    } 
  }
}

Comment mettre en œuvre DynamicNewAnonymous méthode ou comment modifier le ShowPropertiesValue()?

Mes motivations:

dynamic o1 = new MyDynamic();
o1.Name = "abc";
Type o1Type = o1.GetType();
var props = o1Type.GetProperties(); <--I hope can get the Name Property

Si je peux crochet dynamicObject de la Méthode GetType, et les Obliger convertir fortement typées Type.
Le ci-dessus sans couture de code peut fonctionner correctement.

  • J'avoue que je suis un peu confus au sujet de l'motivations.
  • Je pense que vous avez raison 🙂
  • Veuillez nous dire ce que vous voulez faire et pourquoi c'est la solution que vous avez choisie.
  • ExpandoObject, pas ExpandObject (ajouté "o").
  • Cet article peut aider à trouver votre motivation de l'utilisation de l'un ou de l'autre: blogs.msdn.com/b/csharpfaq/archive/2010/01/25/...
InformationsquelleAutor Flash | 2010-09-18