private static Action <TValue> GetCachedStaticSetter(MemberInfo member) { Delegate del; if (GetterSetterCaches <TOwner> .Setters.TryGetInnerValue(member, typeof(TValue), out del)) { return((Action <TValue>)del); } else { Action <TValue> result = null; var fieldInfo = member as FieldInfo; var propertyInfo = member as PropertyInfo; if (fieldInfo != null) { if (!fieldInfo.IsLiteral) { result = EmitUtilities.CreateStaticFieldSetter <TValue>(fieldInfo); } } else if (propertyInfo != null) { if (propertyInfo.CanWrite) { result = EmitUtilities.CreateStaticPropertySetter <TValue>(propertyInfo); } } else { throw new ArgumentException("Cannot create a GetterSetter for a member of type + " + member.GetType().Name + "!"); } GetterSetterCaches <TOwner> .Setters.AddInner(member, typeof(TValue), result); return(result); } }