static ICaster <TIn, TOut> CreateCaster() { var typeIn = typeof(TIn); var typeOut = typeof(TOut); var casterType = TypeUtility.FindType(t => t.Is <ICaster <TIn, TOut> >()); if (casterType == null) { if (typeIn.IsEnum) { return(CreateEnumCaster(true)); } else if (typeOut.IsEnum) { return(CreateEnumCaster(false)); } else if (typeIn.Is <IConvertible>() && typeOut.Is <IConvertible>()) { return(CreateConvertibleCaster()); } else if (typeIn.IsClass && typeOut.IsClass) { return(new ReferenceCaster <TIn, TOut>()); } else if (typeIn.IsClass != typeOut.IsClass) { return(new DefaultCaster <TIn, TOut>()); } else { return(new BitwiseCaster <TIn, TOut>()); } } else { return(CreateCaster(casterType)); } }
public EnumFlagsAttribute(string enumTypeName) { EnumType = TypeUtility.FindType(t => t.Is <Enum>() && t.Name.EndsWith(enumTypeName)); }