示例#1
0
        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));
            }
        }
示例#2
0
 public EnumFlagsAttribute(string enumTypeName)
 {
     EnumType = TypeUtility.FindType(t => t.Is <Enum>() && t.Name.EndsWith(enumTypeName));
 }