2008-12-04 5 views
0

ok, ive une classe et je passe un objet comme propriété.Comment accéder à l'Index Of A Generic.List par Reflection?

l'objet que je passe est un List<X>

dans ma im classe essayant d'accéder à l'index de l'objet par réflexion mais je ne !!!

Exemple:

cette classe, je travaille juste écrit sur la partie que je veux vous montrer et j'ai besoin d'aide.

class MyClass 
{ 
    private object _recordSet; 
    public object RecordSet 
    { 
     get { return _recordSet; } 
     set { _recordSet = value; } 
    } 

    public string Draw() 
    { 
     system.reflection.Assembly asem = system.reflection.Assembly.getAssembly(_dataSource.GetType()); 

     object instance; 

     instance = asem.CreateInstance(_dataSource.GetType().UnderlyingSystemType.FullName); 

     //to access de Count of my List 
     int recordcount = int.Parse(_dataSource.GetType().GetProperty("Count").GetValue(_dataSource,null)); 

     //i need to do a 
     for(int cont = 0; cont < recordCount; cont++) 
     { 
      _dataSource[cont].Name; // <-- THIS PART IS NOT WORKING!!! because i cant access the Index Directly.... WHAT TO DO!! ??? 
     } 
    } 
} 
+0

Je ne suis pas entièrement sûr de ce que vous demandez, j'ai donc supprimé ma réponse. Les chances sont tout ce que vous devez faire est de jeter l'objet à la liste . Il est plus que probable que votre code a d'autres problèmes si vous lancez des objets à partir de. – user7116

Répondre

5

Si vous utilisez la réflexion (et donc beaucoup de object), pourquoi ne pas simplement jeter comme IList (non générique) à la place?

à savoir

IList list = (IList)actualList; 
object foo = list[17]; 

également - pour votre code d'origine avec Count, vous ne voulez pas dire int.Parse - vous devriez juste jeter (puisque nous attendons à ce Count être un int).

+0

Ajouter: if (liste_actuelle est IList) –

+0

@Jeff B - Je ne suis pas d'accord; le scénario suggère que nous nous attendons à ce que ce soit une liste, donc si les données * ne sont pas * un IList, je suis heureux qu'il soulève une exception. Cela dépend du scénario, bien sûr; s'il s'agissait d'une liaison de données ad-hoc à un objet, un IList ou un IListSource, alors "as"/"is" est nécessaire. –

0

Il vous suffit de lancer votre objet dans une liste, vous n'avez pas besoin de réflexion ici.

Questions connexes