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)); }
public static FastSetter CreateSetterProperty(this Type type, string name) { return(new FastSetter(FastAccess.CreateSetterHandler(AccessTools.Property(type, name)))); }