2009-04-09 5 views
2

Dites que je veux parcourir un lecteur de données et créer un chargement d'objets d'un certain type, mais en utilisant une valeur du lecteur de données comme nom d'objet, par exemple.Créer un nom d'objet à partir d'une chaîne

String "string_" + <value from datareader> = new String(); 

Donc, si j'avais des valeurs temp1, temp2 & temp3 sortant du datareader j'aurais 3 nouveaux objets de type string par exemple

string_temp1 
string_temp2 
string_temp3 

Comment puis-je créer des objets avec le nom du datareader ?, ou est-il des suggestions sur une meilleure façon de le faire?

+0

J'ai aussi besoin de faire cela, seulement j'ai besoin de types d'objets (pas de chaînes) avec des noms de variables définis lors de l'exécution. J'ai besoin de ceci pour satisfaire DataContractSerializer pour un service Web hérité, où le nom d'élément est également l'identificateur. Je ne pense pas que les réponses ci-dessous répondent à la question du PO. – barrypicker

Répondre

11

Plutôt que d'utiliser la réflexion, je pense qu'il serait plus facile d'utiliser simplement une Dictionary qui mappe les noms que vous souhaitez que les objets aient à leurs valeurs:

var map = new Dictionary<String, String>(); 
map[...] = new String(); 
// ^
// | 
// +---- substitute with whatever naming scheme you deem suitable 
+0

Ceci est certainement une bonne approche du problème. – Statement

+0

Tuez cependant le préfixe 'string_' inutile. –

+0

C'est certainement le chemin à parcourir. :) – ibz

2

Il y aurait peu de valeur en faisant . Si vous créez la variable NAME à partir de la valeur, il n'y aura aucun moyen de référencer cette variable dans votre code, car le code est compilé au moment de la compilation et vous essayez de définir des noms de variables lors de l'exécution. Rappelez-vous, les noms de variables sont vraiment là juste pour que le compilateur puisse mapper dans IL, et éventuellement JIT correctement. C'est pourquoi l'obfuscation fonctionne - l'une des principales choses que font la plupart des obfuscateurs est de brouiller tous vos noms de variables en noms très courts et dénués de sens. Cela n'a aucun effet sur le comportement d'exécution - les noms sont dénués de sens une fois compilés.

Je recommanderais d'aller avec l'approche de John Feminella, ou quelque chose de similaire.

Questions connexes