public bool IsAssignableFrom(IXamlIlType type) { if (!type.IsValueType && type == XamlIlPseudoType.Null) { return(true); } if (type.IsValueType && type.GenericTypeDefinition?.FullName == "System.Nullable`1") { return(true); } if (FullName == "System.Object" && type.IsInterface) { return(true); } var baseType = type; while (baseType != null) { if (baseType.Equals(this)) { return(true); } baseType = baseType.BaseType; } if (IsInterface && type.GetAllInterfaces().Any(IsAssignableFrom)) { return(true); } return(false); }