Вам необходимо использовать оператор typeof
в C #.
if (value.IsSubclassOf(typeof(ClassBase)))
{
_typeOfClassBase = value.GetType();
}
else
{
throw new ArgumentOutOfRangeException($"{nameof(TypeOfClassBase)} must be a subclass of {nameof(ClassBase)}");
}
Оператор typeof
возвращает объект Type
, который соответствует типу, который был передан в качестве аргумента.Когда вы работаете с экземпляром, вы не обязательно знаете, что это за тип, поэтому typeof
нельзя использовать, поэтому функция GetType()
существует в классе object
.
РЕДАКТИРОВАТЬ: Я также хотел бы проверить, если вы хотите использовать IsSubclassOf
или вы действительно хотите использовать IsInstanceOfType
/ IsAssignableFrom
.
IsSubclassOf
не возвращает true, если выСравниваешь с однотипными.Т.е.
typeof(Type1).IsSubclassOf(typeof(Type1)) //returns false
Если вы всегда сравниваете экземпляры с базовым типом, тогда вы можете использовать IsInstanceOfType
, в противном случае вы можете использовать IsSubclassOf
с дополнительной проверкой для ==
.В качестве альтернативы их IsAssignableFrom
, но они могут быть предостережениями с этим.Я всегда советую читать документацию - в данном случае MSDN.