.NET反射记录

private void test<T>()
        {
            T Ttype = (T)Activator.CreateInstance(typeof(T));
            PropertyInfo[] Tpropertys = Ttype.GetType().GetProperties();
            foreach (PropertyInfo tp in Tpropertys)
            {
                object value = tp.GetValue(Ttype,null);//获取属性的值
                tp.SetValue(Ttype, "", null);//给属性赋值
            }

        }

//返回一个类的特性,或者类中字段的特性,其中ConfigAttribute为自定义特性

private object test1<T>(Expression<Func<T, object>> expr)
        {
            //如果lambda表达式是属性操作,则返回属性上的标记
            if (expr.Body.NodeType == ExpressionType.MemberAccess)
            {
                MemberExpression body = expr.Body as MemberExpression;
                if (body != null)
                {
                    PropertyInfo pi = body.Member as PropertyInfo;
                    var objs = pi.GetCustomAttributes(typeof(ConfigAttribute), true);
                    if (objs.Length > 0)
                    {
                        ConfigAttribute attr = objs[0] as ConfigAttribute;
                        return attr;
                    }
                }
            }
            //如果lambda表达式是参数操作,则返回类上的标记
            if (expr.Body.NodeType == ExpressionType.Parameter)
            {
                ParameterExpression body = expr.Body as ParameterExpression;
                var objs = body.Type.GetCustomAttributes(typeof(ConfigAttribute), true);
                if (objs.Length > 0)
                {
                    ConfigAttribute attr = objs[0] as ConfigAttribute;
                    return attr;
                }
            }
            return null;
        }

另外要获取比如MVC中DIsplay这样的特性:
private ModelMetadata GetModelMetadata<T>(string PropertyName)//PropertyName是字段属性名称
        {
            ModelMetadataProvider provider = ModelMetadataProviders.Current;
            ModelMetadata containerMetadata = new ModelMetadata(provider, null, () => null, typeof(T), null);
            var metadata = containerMetadata.Properties.FirstOrDefault(m => m.PropertyName == PropertyName);
            return metadata;
        }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值