PropertyInfo[] properties = entity.GetType().GetProperties()
.Where(p => p.GetMethod.IsVirtual).ToArray();
Oppure, per NET 4 e sotto:
PropertyInfo[] properties = entity.GetType().GetProperties()
.Where(p => p.GetGetMethod().IsVirtual).ToArray();
che otterrà un elenco di virtuale pubblica proprietà.
Non funziona per le proprietà di sola scrittura. Se necessario, è possibile controllare manualmente CanRead
e CanWrite
e leggere il metodo appropriato.
Ad esempio:
PropertyInfo[] properties = entity.GetType().GetProperties()
.Where(p => (p.CanRead ? p.GetMethod : p.SetMethod).IsVirtual).ToArray();
Si potrebbe anche solo afferrare il primo di accesso:
PropertyInfo[] properties = entity.GetType().GetProperties()
.Where(p => p.GetAccessors()[0].IsVirtual).ToArray();
fonte
2012-09-06 18:17:21
Per gestire in modo sicuro le proprietà private che si possono fare: '(p.CanRead p.GetGetMethod (vero):? P.GetSetMethod (true)). IsVirtual;' –