2010-06-09 4 views
1

Je ne sais pas si c'est possible ou non. Ce que je veux faire est de référencer un DataTable (et d'autres objets, mais le faire fonctionner pour un rendra le reste facile) et l'utiliser comme un paramètre, mais je veux le faire en boucle, afin que je puisse effectuer le fonction à chaque DT1 DataTable, DT2, DT3 etc. Quelque chose comme ça (bien que cela ne fonctionne évidemment pas):C# Référence dynamique des objets dans la boucle

for (int i = 0; i <= max; i++) 
{ 
    Load("dt"+i); 
} 

Est-ce réellement possible de faire?

+0

Où sont vos 'DataTable's stockés? Avez-vous une variable séparée pour chaque nom, dt1, dt2, etc ou sont-ils stockés dans quelque chose comme un hastable où les éléments dt1, dt2, etc sont les clés? –

Répondre

5

tous vos DataTable bâton s dans un tableau:

var dataTables = new[] { dt1, dt2, dt3 }; 
foreach(var dt in dataTables) 
    // ... 
+0

jeez, c'est si évident maintenant. Merci. –

0

Oui, il est possible de le faire. Si vous pouvez les référencer au moment de la compilation, vous pouvez les coller dans un tableau comme l'a dit Anton. Sinon, vous devez utiliser Reflection pour travailler avec eux. Dans les deux cas, les instances DataTable doivent être stockées dans une variable quelque part. Pouvez-vous donner un peu plus de contexte? D'où viennent les DataTables?

1

Je recommande d'utiliser la méthode décrite par Anton Gogolev. Cependant, vous pouvez le faire comme vous voulez en utilisant l'espace de noms 'System.Reflection'. Voici un exemple. Notez que les membres DataTable doivent être public pour que le GetField fonctionne.

public DataTable dt0 = new DataTable(); 
public DataTable dt1 = new DataTable(); 
public DataTable dt2 = new DataTable(); 

public void findall() 
{ 
    DataTable temp; 
    for (int i = 0; i < 3; i++) 
     temp = (DataTable)this.GetType().GetField("dt" + i.ToString()).GetValue(this); 
} 
0
foreach(var dt in new List<int>() { dt1,dt2,dt3,dt4,dt5 }) 
{ 
// do something 
} 
Questions connexes