Я думаю, вы пропустили случай: возможно, T
просто наследует свойство от B
, не переопределяя его (если вы точно не знаете, что это не произойдет в вашем конкретном сценарии).
В любом случае вам просто нужно выполнить поиск свойства по имени, используя typeof(T).GetProperty
, поскольку в данном классе не может быть 2 свойств с одинаковым именем (в отличие от методов, которые могут иметь несколько перегрузок). Однако вам следует остерегаться случая, когда T
скрывает свойство, унаследованное от B
, с использованием модификатора new
. Чтобы справиться с этим случаем, вы можете проверить Attributes
метода получения свойства (полученного с помощью GetGetMethod
): если присутствует флаг NewSlot
, он скрывает унаследованный метод получения.