IsAssignableFrom, IsInstanceOfType and the is keyword, what is the difference?
c#, c#-4.0, casting
Solution
You use whatever you have the information for.
If you have an instance and a static type you want to check against, use `is`.
If you don't have the static type, you just have a `Type` object, but you have an instance you want to check, use `IsInstanceOfType`.
If you don't have an instance and you just want to check the compatibility between a theoretical instance of a `Type` and another `Type`, use `IsAssignableFrom`.
But really is seems like you are just re-implementing the as operator (except that yours would also work for non-nullable value types, which is usually not a big limitation).
Problem
I have an extension method to safe casting objects, that looks like this: ``` public static T SafeCastAs<T>(this object obj) { if (obj == null) return default(T); // which one I should use? // 1. IsAssignableFrom if (typeof(T).IsAssignableFrom(obj.GetType())) return (T)obj; // 2. IsInstanceOfType if (typeof(T).IsInstanceOfType(obj)) return (T) obj; // 3. is operator if (obj is T) return (T) obj; return default(T); } ``` As you can see, I have 3 choice, so which one I should to use? Actually what is the difference between `IsAssignableFrom`, `IsInstanceOfType`, and `is` operator?