• 全部
...

C#动态设置标签Attribute属性中的值

江南小鱼 2012-08-16 04:21:27
要实现动态的设置标签特性值,设置后通过反射获取的还是原来的值,有知道怎么回事的嚒?

设置标签特性
  1. /// <summary>
  2. /// 设置obj_T对象AType类型标签Attribute属性中的值
  3. /// </summary>
  4. /// <typeparam name="AType">标签类型</typeparam>
  5. /// <typeparam name="RType">返回类型</typeparam>
  6. /// <param name="obj_T">类</param>
  7. /// <param name="aTypePropertyName">标签属性名称</param>
  8. /// <returns>值</returns>
  9. public static void SetObjAttriVal<AType, RType>(object obj_T, string aTypePropertyName, string nTypePropertyName)
  10. {
  11. Type typeT = obj_T.GetType();
  12. Type typeA = typeof(AType);
  13. object[] memberInfo = typeT.GetCustomAttributes(typeA, true);
  14. if (null != memberInfo && memberInfo.Length > 0)
  15. {
  16. System.Reflection.MemberInfo[] memberInfosAttr = typeA.GetMember(aTypePropertyName);
  17. if (null != memberInfosAttr && memberInfosAttr.Length > 0 && memberInfosAttr[0].MemberType == System.Reflection.MemberTypes.Property)
  18. {
  19. System.Reflection.PropertyInfo propertyInfo = memberInfosAttr[0] as System.Reflection.PropertyInfo;
  20. propertyInfo.SetValue(memberInfo[0], nTypePropertyName, null);
  21. }
  22. }
  23. }
...全文
给本帖投票
2548 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
江南小鱼 2012-10-16
  • 打赏
  • 举报
回复
顶,把贴子顶起来
江南小鱼 2012-08-21
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 的回复:]

这就像“动态修改一个方法的代码”一样。
[/Quote]

视图名放在类的Attribute里,有很多情况只是查询的视图不一样,查询条件(即类里面的属性完全相同),为了查询不同的视图就腰定义n多不同类名相同属性的类,感觉不太好。想着是不是可以动态修改类的attribute实现类共用。
如兄台所说,这种办法行不通了。wcf对泛型好像不支持。
江南小鱼 2012-08-21
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 的回复:]

引用 3 楼 的回复:
"Attribute的值是写在程序集的元数据中了",这句话从何而来,兄台怎么求证的呢?

利用特性扩展元数据
自己看看吧
[/Quote]
感谢兄台!
iyomumx 2012-08-20
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 的回复:]
"Attribute的值是写在程序集的元数据中了",这句话从何而来,兄台怎么求证的呢?
[/Quote]
利用特性扩展元数据
自己看看吧
threenewbee 2012-08-20
  • 打赏
  • 举报
回复
这就像“动态修改一个方法的代码”一样。
江南小鱼 2012-08-19
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 的回复:]

Attribute的值是写在程序集的元数据中了,你通过反射获得的是Attribute的实例,你可以更改这个实例中储存的值,但在不更改程序集的情况下,再次进行反射运行时只会通过元数据再构造一个Attribute的实例,而不会读取你更改的数据。也就是说,对获得的attribute实例的更改,无法反映到程序集的元数据中,更改一个Attribute的值近乎无意义。
[/Quote]
"Attribute的值是写在程序集的元数据中了",这句话从何而来,兄台怎么求证的呢?
iyomumx 2012-08-19
  • 打赏
  • 举报
回复
Attribute的值是写在程序集的元数据中了,你通过反射获得的是Attribute的实例,你可以更改这个实例中储存的值,但在不更改程序集的情况下,再次进行反射运行时只会通过元数据再构造一个Attribute的实例,而不会读取你更改的数据。也就是说,对获得的attribute实例的更改,无法反映到程序集的元数据中,更改一个Attribute的值近乎无意义。
江南小鱼 2012-08-19
  • 打赏
  • 举报
回复
没人遇见过这种情况?

111,082

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧

手机看
关注公众号

关注公众号

客服 返回
顶部