Example #1
0
        public static FastGetter <TClass, TResult> CreateGetter <TClass, TResult>(string name)
        {
            var fieldInfo = AccessTools.Field(typeof(TClass), name);
            var propInfo  = AccessTools.Property(typeof(TClass), name);

            if (fieldInfo == null && propInfo == null)
            {
                throw new Exception($"{typeof(TClass).Name} does not contain field or property {name}");
            }
            bool   isProp         = propInfo != null;
            Type   memberType     = isProp ? propInfo.PropertyType : fieldInfo.FieldType;
            string memberTypeName = isProp ? "property" : "field";

            if (!typeof(TResult).IsAssignableFrom(memberType))
            {
                throw new InvalidCastException($"Cannot cast field type {typeof(TResult).Name} as {memberType} for class {typeof(TClass).Name} {memberTypeName} {name}");
            }
            var handler = isProp ?
                          FastAccess.CreateGetterHandler <TClass, TResult>(propInfo) :
                          FastAccess.CreateGetterHandler <TClass, TResult>(fieldInfo);

            return(new FastGetter <TClass, TResult>(handler));
        }
 public static FastGetter CreateGetterProperty(this Type type, string name)
 {
     return(new FastGetter(FastAccess.CreateGetterHandler(AccessTools.Property(type, name))));
 }