Пример #1
0
        public static FastSetter <TClass, TValue> CreateSetter <TClass, TValue>(string name)
        {
            var propertyInfo = AccessTools.Property(typeof(TClass), name);
            var fieldInfo    = AccessTools.Field(typeof(TClass), name);

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

            if (!typeof(TValue).IsAssignableFrom(memberType))
            {
                throw new Exception($"Cannot cast property type {typeof(TValue).Name} as {memberType} for class {typeof(TClass).Name} {memberTypeName} {name}");
            }
            var handler = isProperty ?
                          FastAccess.CreateSetterHandler <TClass, TValue>(propertyInfo) :
                          FastAccess.CreateSetterHandler <TClass, TValue>(fieldInfo);

            return(new FastSetter <TClass, TValue>(handler));
        }
Пример #2
0
 public static FastSetter CreateSetterProperty(this Type type, string name)
 {
     return(new FastSetter(FastAccess.CreateSetterHandler(AccessTools.Property(type, name))));
 }