Ответ 1
b.GetType() == typeof(A)
Я хочу проверить тип объекта. Я только хочу вернуть true, если тип точно такой же. Унаследованные классы должны возвращать false.
например:
class A {}
class B : A {}
B b = new B();
// The next line will return true,
// but I am looking for an expression that returns false here
if(b is A)
b.GetType() == typeof(A)
(b is A)
проверяет b на совместимость типов с A, что означает, что он проверяет иерархию наследования b и реализованные интерфейсы для типа A.
b.GetType() == typeof(A)
, с другой стороны, проверяет точный тот же тип. Если вы еще не квалифицируете типы далее (то есть кастинг), вы проверяете объявленный тип b.
В любом случае (используя любой из приведенных выше) вы получите true
, если b - точный тип A.
Будьте осторожны, чтобы узнать, почему вы хотите использовать точные типы в одной ситуации над другой:
Edit:
В вашем примере
if(b is A) // this should return false
превратите его в точную декларированную проверку типа, используя:
if (b.GetType() == typeof(A))
использование:
if (b.GetType() == typeof(A)) // this returns false
Ваш образец кода кажется противоположным вашему вопросу.
bool isExactTypeOrInherited = b is A;
bool isExactType = b.GetType() == a.GetType();
bool IsSameType(object o, Type t) {
return o.GetType() == t;
}
Затем вы можете вызвать метод следующим образом:
IsSameType(b, typeof(A));
Пожалуйста, используйте функцию Поиск, прежде чем задавать новый вопрос.
На этот вопрос уже был дан ответ:
Проверьте, являются ли типы литыми/подклассами
и сделать обратное - вернуть false, если тип является подклассом.
EDIT: Другой связанный с этим вопрос: Тип Проверка: typeof, GetType или есть?