2017-04-07 2 views
3

Je dois créer un objet dynamique et ses propriétés lors de l'exécution, puis créer une instance de cet objet pour stocker les valeurs.Créer un objet et ses propriétés à l'exécution à partir de la liste

pourquoi je veux au-dessus de la logique! Je lis le fichier excel en C# et la première ligne de code est l'en-tête qui est en fait les propriétés et suivi par chaque ligne qui est l'instance de l'objet dynamique.

List<string> ExcelDataHeader = new List<string>(); 
     for (int y = 2; y <= colCount; y++) 
      { 
      ExcelDataHeader.Add(xlRange.Cells[headerRow, y].Value2.ToString()); 
      } 

    dynamic MyDynamic = new System.Dynamic.ExpandoObject(); 
    ?????????? 

J'ai besoin de revenir Excel lire les données dans l'objet

+1

Habituellement, vous définissez les privilèges en utilisant 'MyDynamic.PropertyName = value'. Dans votre cas, 'value' vient probablement de la feuille, donc c'est plutôt quelque chose comme' MyDynamic.PropertyName = ExcelDataHeader [3] '. Je ne comprends pas quelle est votre question. – HimBromBeere

+0

Copie possible de [Ajouter dynamiquement des propriétés C# à l'exécution] (http://stackoverflow.com/questions/15819720/dynamically-add-c-sharp-properties-at-runtime) – Clint

+1

Pourquoi créer un objet dynamique? Rangez simplement vos valeurs dans un 'Dictionary'. Cela me semble beaucoup plus simple. – DavidG

Répondre

2

Vous pouvez utiliser ExpandoObject ici - ça va marcher, mais vous devez utiliser l'API dictionnaire:

IDictionary<string, object> obj = new ExpandoObject(); 
obj["id"] = 123; 
obj["name"] = "Fred"; 

// this is the "dynamic" bit: 
dynamic dyn = obj; 
int id = dyn.id; // 123 
string name = dyn.name; // "Fred" 

Cependant , Je ne vois pas le but. Puisque vous ne faites pas référence à l'objet dans le code C# par des choses comme obj.PropertyName, dynamic a très peu de but. Vous pourriez tout aussi bien stocker chaque enregistrement dans un Dictionary<string,object> ou similaire. Étant donné ce que vous décrivez, il n'y a pas d'endroit où vous utiliseriez réellement MyDynamic comme objet dynamic.