C#用反射获取属性值和属性名的问题

LS1219 2012-09-30 09:10:25
我写了一个类,没有set和get,用
System.Reflection.FieldInfo[] properties = t.GetFields((BindingFlags.NonPublic | BindingFlags.Instance
| BindingFlags.Public));
可以获得类名,但是无法通过如下代码获得属性值
System.Reflection.PropertyInfo propertyInfo = t.GetProperty(properties[i].Name);
paramters[i].Value = propertyInfo.GetValue(s, null);
写了set和get之后,可以获得值了,又获得不了属性名了,高手指点一下。谢谢。
...全文
453 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
qldsrx 2012-09-30
  • 打赏
  • 举报
回复
头像是本人?
你的properties = t.GetFields怎么不改为t.GetPorperties啊
LS1219 2012-09-30
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]

那怎么是获得类名的?

你都能够得到属性数组了,又画蛇添足地去用属性数组中的属性的名字去获得属性自身,是干什么?

什么叫做“与获得不了属性名了?”呢?




其实我理解你的问题,就是每写一行代码都要别人给你写,而你自己不能理解你自己写的代码。每当别人给你写一点代码,你就立刻自满地以为自己“全都会了”,可是自己写的代码自己反过头来其实并不懂,这是悲剧。这种没能培养出自学能力的……
[/Quote]

呵呵,谢谢啦,刚才实在是写不出来,现在写出来了。
  • 打赏
  • 举报
回复
那怎么是获得类名的?

你都能够得到属性数组了,又画蛇添足地去用属性数组中的属性的名字去获得属性自身,是干什么?

什么叫做“与获得不了属性名了?”呢?




其实我理解你的问题,就是每写一行代码都要别人给你写,而你自己不能理解你自己写的代码。每当别人给你写一点代码,你就立刻自满地以为自己“全都会了”,可是自己写的代码自己反过头来其实并不懂,这是悲剧。这种没能培养出自学能力的状态,跟一个人在高中甚至大学时靠小聪明而不是靠大聪明的学习习惯有关,在独立工作中会处处碰壁。
【源码免费下载链接】:https://renmaiwang.cn/s/5p4v7 在C#编程中,反射是一种强大的机制,它允许运行时检查和操作程序集、类型、方法、属性等元数据。反射通常用于动态类型创建、执行未事先硬编码的方法,以及在运行时发现类的结构。在本文中,我们将探讨如何使用反射遍历一个对象的所有属性及其对应的。我们需要获取对象的`Type`对象。`Type`对象代表了一个类的元数据,它包含了关于类的所有信息,包括其属性、方法、构造函数等。以下是如何获取对象的`Type`:```csharpType t = tc.GetType();```在这里,`tc`是类的实例,`GetType()`方法返回与`tc`关联的`Type`对象。接下来,我们可以调用`Type.GetProperties()`来获取类中定义的所有属性。`GetProperties()`返回一个`PropertyInfo[]`数组,其中包含类的所有公共属性。如果需要访问非公共属性,可以使用`GetProperties(BindingFlags)`并提供适当的绑定标志,如`BindingFlags.NonPublic`。```csharpforeach (PropertyInfo pi in t.GetProperties()){ // 在这里,pi是PropertyInfo对象,表示类的一个属性}```一旦我们有了`PropertyInfo`对象,我们可以通过调用`GetValue()`方法来获取属性的当前。`GetValue()`接受两个参数:一个是对象实例,另一个是可选的索引参数(对于索引属性)。```csharpobject value1 = pi.GetValue(tc, null);```在这里,`null`参数表示我们没有索引器,因为我们遍历的是非索引属性。此外,我们可以获取属性字,以便

111,130

社区成员

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

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

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