Я подозреваю, что вы хотите что-то вроде этого (но читайте дальше):
if (m_oType.IsAssignableFrom(value.GetType()))
Обратите внимание, что мы называем это на m_oType
, не передавая m_oType
до это.Из документов на возвращаемое значение IsAssignableFrom
, где c
- параметр:
true, если c и текущий тип представляют один и тот же тип, или еслитекущий Тип находится в иерархии наследования c, или если текущий Тип является интерфейсом, который реализует c, или если c является параметром универсального типа, и текущий Тип представляет одно из ограничений c.
Например, typeof(object).IsAssignableFrom(typeof(string))
возвращает true
, потому что object
находится в иерархии наследования string
.
РЕДАКТИРОВАТЬ: Как уже отмечалось, он прервется, если либо m_oType
будет нулевым, либо value
нулевой.Мы можем легко обойти value
, будучи null
, но не ясно, что вы ожидаете от него, если m_oType
равно нулю.Возможно, вам следует предотвратить это в установщике для свойства Type
(и конструктора)?Затем используйте:
// This will always store a null
if (value == null || m_oType.IsAssignableFrom(value.GetType()))
// This will never store a null
if (value != null && m_oType.IsAssignableFrom(value.GetType()))