2011-03-16 3 views
3

Comment obtenirValeur de la classe de propriété avec cette méthode?Type de paramètre à variable

public static int SQLInsert<TEntity>(TEntity obj) where TEntity : class 
{ 
    foreach (var item in obj.GetType().GetProperties()) 
    { 
     //item.GetValue(?,null); 
    } 
    return 1; 
} 

Répondre

1
item.GetValue(obj, null); 

qui travaillerait

5

item sera un PropertyInfo. Vous utiliseriez:

object value = item.GetValue(obj, null); 

Notez que vous êtes à peu près ignorant le paramètre de type TEntity au moment. Vous pouvez utiliser:

foreach (var property in typeof(TEntity).GetProperties()) 

De cette façon, si quelqu'un appelle

SQLInsert<Customer>(customer) 

et la valeur de customerfait fait référence à une sous-classe de Customer propriétés supplémentaires, seules les propriétés de Customer seront utilisé.

+0

+1 Très bon point sur TEntity Jon, ce genre de subtilités sont facilement passer inaperçus. –

0

Comme ça, au lieu de indexeur vous pouvez utiliser la valeur null:

public static int SQLInsert<TEntity>(TEntity obj) where TEntity : class 
{ 
    var indexer = new object[0]; 
    foreach (var item in obj.GetType().GetProperties()) 
    { 
     item.GetValue(obj,indexer); 
    } 
    return 1; 
} 
Questions connexes