示例#1
0
        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);
            }
        }