PropertyInfo[] properties = entity.GetType().GetProperties()
.Where(p => p.GetMethod.IsVirtual).ToArray();
lub dla .NET 4 i poniżej:
PropertyInfo[] properties = entity.GetType().GetProperties()
.Where(p => p.GetGetMethod().IsVirtual).ToArray();
Że dostanie listę wirtualny publicznego nieruchomości.
Nie będzie działać dla właściwości tylko do zapisu. Jeśli zajdzie taka potrzeba, możesz ręcznie sprawdzić CanRead
i CanWrite
i przeczytać odpowiednią metodę.
Na przykład:
PropertyInfo[] properties = entity.GetType().GetProperties()
.Where(p => (p.CanRead ? p.GetMethod : p.SetMethod).IsVirtual).ToArray();
Można też po prostu chwyć pierwszy akcesor:
PropertyInfo[] properties = entity.GetType().GetProperties()
.Where(p => p.GetAccessors()[0].IsVirtual).ToArray();
Aby bezpiecznie obsługiwać właściwości prywatnych można zrobić: '(p.CanRead p.GetGetMethod (true): p.GetSetMethod (true)). IsVirtual;' –