我有一个安全转换对象的扩展方法,如下所示:
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);
}
如您所见,我有 3 个选择,那么我应该使用哪一个?IsAssignableFrom
实际上,IsInstanceOfType
, 和is
operator之间有什么区别?