2016-08-24 2 views
3

J'ai une classe statique avec plusieurs objets anonymes. Chaque objet a une quantité différente de propriétés, mais chaque propriété est toujours un objet de la classe créée.Accéder à la propriété de l'objet anonyme à partir de la classe statique C#

static public class Fields{ 
    static public Object FieldInfo1 = new { 
     Customer = new FieldInformation("value1","value2")   
    } 

    static public Object FieldInfo2 = new { 
     Customer = new FieldInformation("value1","value2"), 
     Company = new FieldInformation("value1","value2"),   
    } 
} 

je tente d'accéder Fields.FieldInfo1.Customer en deuxième classe (Program.cs, son une application console), mais il ne fonctionne pas, je ne reçois que Fields.FieldInfo1. Qu'est-ce que je fais mal?

+1

.net est un type langage sûr que votre code doit être de type courant, vous ne pouvez pas accéder à une propriété sur une variable tapez 'object' car l'objet ne contient pas de propriété appelée' FieldInfo1'. Les types anonymes sont probablement une mauvaise idée ici, qu'essayez-vous de faire et pourquoi? – Charleh

+0

Cela ne fonctionnera jamais puisque Fields.FieldInfo1 ne contient pas de propriété Company, seulement Customer. –

+0

@MurrayFoxcroft désolé mon mauvais, je veux dire Client –

Répondre

3

Vous devez le convertir en type d'objet. Parce que vous avez non (au moment de la compilation) jeté as dynamic:

var obj = Fields.FieldInfo1 as dynamic; 
var value = obj.Customer.Prop1; // "value1" 

Mais je ne vois pas pourquoi vous avez besoin de le faire de cette façon. Ce n'est pas un C#, qui est un langage fortement typé. À mon avis, vous devriez repenser votre conception.

This pourrait vous donner un point de départ pour quand il est bon d'utiliser des types anonymes

+0

@Jauch - Je l'ai exécuté avant de poster et il ne le fait pas. (J'ai dû créer une classe 'FieldInformation' avec un' Prop1', 'Prop2' pour le code original dans la question à travailler) –

+0

Désolé @ Gilad, j'ai réalisé mon erreur. J'ai essayé d'utiliser le "Prop1", mais dans mon code j'ai utilisé un autre nom :) – Jauch

+0

@Jauch - Pas de problème :) –