2010-07-01 3 views
-3

Amis, je dois créer une série de ArrayList s, contenant chacun objets d'origine inconnue, chaque instance étant affectée à une variable locale distincte. Jusqu'ici, tout va bien ... Mais j'ai aussi besoin que le nom de chaque variable locale suive un modèle très spécifique: le nom devrait commencer par "oArr", suivi par un ou plusieurs chiffres reflétant la position de ce tableau particulier dans la séquence . De plus, je ne saurai pas au moment de la compilation combien de ces tableaux - et par conséquent, combien de variables locales - je vais avoir besoin!Comment puis-je créer une séquence de variables numérotées lors de l'exécution?

Il me semble que c'est peut-être un problème qui pourrait être résolu par la disponibilité de types dynamiques en C# 4.0, mais je ne suis pas du tout familier avec leur utilisation. Comment pourrais-je prendre le code comme ça ...

int i=0; 
foreach(something) 
{ 
    ArrayList oArr+i=new ArrayList(); 
    i++; 
} 

... et la transformer en quelque chose qui correspond aux critères décrits ci-dessus et compile en fait?

Alternativement, y a-t-il une approche plus simple et plus saine à ce problème?

+5

Vous n'avez pas fourni suffisamment d'informations pour nous de vous aider. – ChaosPandion

+4

Qu'essayez-vous d'accomplir en changeant le nom de la variable? –

+3

Ah, l'ancien motif "variable non référencé"! Attention, de nombreuses solutions aboutissent à des noms de variables prévisibles, permettant aux clients avertis de référencer la variable en utilisant une variable contenant le nom variable de la variable ... Pour éviter cela, utilisez soit une source externe fiable de vraies valeurs aléatoires, soit oblige les clients à utiliser des noms de variable variables pour les variables contenant leurs variables nom variables variables. – Shog9

Répondre

6

Vous ne pouvez pas changer le nom d'une variable pendant l'exécution, car le code (même le code C#) a été compilé avec un certain nom de variable. Si vous pouviez changer le nom pendant l'exécution, cela causerait des problèmes. Par exemple, si le langage permettait de modifier les noms des variables, lorsque vous essayez d'accéder à une variable appelée 'var1', le compilateur ignore si, pendant l'exécution, ce nom de variable a changé et s'appelle maintenant 'x'.

Vous pouvez essayer de permettre à votre programme de compiler dynamiquement du code, mais ce n'est probablement pas la bonne solution à votre problème. Si vous expliquez mieux ce dont vous avez besoin, nous pourrions vous fournir une solution efficace.

Hope this aidé

EDIT: En voyant vos éditions Je peux vous dire qu'il est impossible avec l'approche que vous utilisez actuellement. Je pourrais vous suggérer ce qui suit:

int i = 0; 
List<ArrayList> masterList = new List<ArrayList>(); 
foreach (something) 
{ 
    masterList.Add(new ArrayList()); 
    i++; 
} 

Si ce que vous avez besoin est d'avoir chaque ArrayList d'avoir un nom spécifique, vous pouvez rappeler que vous pouvez utiliser un dictionnaire:

int i = 0; 
Dictionary<string, ArrayList> masterList = new Dictionary<string, ArrayList>(); 
foreach (something) 
{ 
    masterList.Add("oArr" + i.ToString(), new ArrayList()); 
    i++; 
} 
ArrayList al = masterList["oArr1"]; 
4

Est-ce que ce travail pour vous?

var arrayLists = new List<ArrayList>(); 
var i = 0; 
foreach(var item in list) 
{ 
    arrayLists.Add(new ArrayList()); 
    i++; 
} 

Ensuite, vous pouvez accéder à chaque liste de tableaux par index.

1

Utilisez une liste d'ArrayLists.

Questions connexes