2011-07-20 3 views
1

Je souhaite créer dynamiquement une classe dans C# .net.créer dynamiquement une classe dans C# .net

J'ai essayé d'utiliser des méthodes anonymes car le nombre de variables membres est donnée dynamique, j'ai essayé comme ça,

string element = "element"; 
string str = String.Empty; 
for (int i = 0; i < elementsCount; i++) 
{ 
    str = String.Concat(str, element + i, "=String.Empty", ","); 
    if (i == elementsCount - 1) 
     str = String.Concat(str, element + i, "=String.Empty"); 
} 
string s = "new{" + str + "}"; 
var a=s; 

et

je veux affecter la classe « a » comme ObservableCollection mais je ne pouvait pas faire ça.

Y at-il un moyen de faire ces deux? mais ce n'est pas la bonne façon je suppose;

+0

"Je veux créer dynamiquement une classe C# .net." Non, vous ne le faites pas. Sauf si vous savez ce que vous faites. Ce qui évidemment, vous ne le faites pas. – Euphoric

Répondre

3

Il n'est pas une idée très utile de créer une classe à la volée, car aucun de votre autre code sera en mesure de lui parler au moment de la compilation. Quel est l'objectif ici? Options:

  • utilisent un Dictionary<string,object> pour renvoyer des données calées par nom
  • à 4.0, utilisez ExpandoObject, qui a à la fois dictionnaire et dynamic API
  • si cela est pour databinding, mettre en œuvre ICustomTypeDescriptor et des propriétés à l'exécution

Par exemple:

string element = "element"; 
    string str = String.Empty; 
    int elementsCount = 20; 
    IDictionary<string,object> obj = new ExpandoObject(); 
    for (int i = 0; i < elementsCount; i++) 
    { 
     obj[element + i] = "value " + i; 
    } 
    dynamic viaDynamic = obj; 
    string val0 = viaDynamic.element0; // = "value 0" 

mais surtout, il a encore l'API IDictionary<string,object> pour une utilisation statique.

0

Voulez-vous créer des classes (types) ou des instances de types existants?

Pour ce dernier regard sur System.Reflection et la activator class

si vous utilisez .net 4 que vous pouvez utiliser le DLR de C#

Questions connexes