How to check if an object its *exactly* a class, not a derived one?

c#, inheritance

Solution

Generalizing snicker's answer:

public static bool IsExactly<T>(this object obj) where T : class
{
  return obj != null && obj.GetType() == typeof(T);
}

and now you can say

if (foo.IsExactly<Frob>()) ...

Caveat: use extension methods on object judiciously. Depending on how widely you use this technique, this might not be justified.

Problem

There is any way to determine if an object is exactly a class and not a derived one of that? For instance: ``` class A : X { } class B : A { } ``` I can do something like this: ``` bool isExactlyA(X obj) { return (obj is A) && !(obj is B); } ``` Of course if there are more derived classes of `A` I'd have to add and conditions.

Original source

Related problems