100分求助---如何取得类的所有属性

pctuzi 2010-01-18 10:17:10
请问如何利用反射的方式取得一个类的所有属性。
例如:有个类UserClass,其中有两个属性UserClass.Name,UserClass.Age,UserClass的命名空间为Model
例:
string name="小王";
string Age=24;
string ClassName="UserClass";

请教各位大侠,我反射的知识学的不是特别好。如何用上面三个字符串最终实现下面的语句
myClass.Name="小王"
myClass.Age=24

也就是说先反射出来类的实例,然后再如何遍历出类的所有属性?这两步操作麻烦能给出完整代码。万分感谢。在线等
...全文
195 22 打赏 收藏 转发到动态 举报
写回复
用AI写文章
22 条回复
切换为时间正序
请发表友善的回复…
发表回复
ysz89757 2010-01-18
  • 打赏
  • 举报
回复
学习了
wuyq11 2010-01-18
  • 打赏
  • 举报
回复
UserClass user=new UserClass();
System.Type[] t=user.GetTypes();
System.Reflection.PropertyInfo[] pi = t.GetProperties(BindingFlags.Public | BindingFlags.Instance);
foreach (PropertyInfo p in pi) {

}
wuyq11 2010-01-18
  • 打赏
  • 举报
回复
UserClass user=new UserClass();
System.Type[] types =user.GetTypes();
System.Reflection.PropertyInfo[] pi = type.GetProperties(BindingFlags.Public | BindingFlags.Instance);
foreach (PropertyInfo pi in properties) {

}
happyxiaowuge 2010-01-18
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 fenglei225 的回复:]
正解,不用看了,这个就是对的

UserClass user=new UserClass();
PropertyInfo[] pis = user.GetType().GetElementType().GetProperties(); 或者是
PropertyInfo[] pis = user.GetProperties();

foreach (PropertyInfo pi in pis)
{

try
          {
                        object  valueName=pi.Name;
                        object  valeProperty=pi.PropertyType;
                        object value = pi.GetValue(user, null);
                }
                    catch (Exception ex)
                    {
                        System.Console.WriteLine(ex.Message);
                    }
}
[/Quote]
这个的确可以
cuike519 2010-01-18
  • 打赏
  • 举报
回复
构造起 = 构造器


不好意思,注释里面有错字。。。
cuike519 2010-01-18
  • 打赏
  • 举报
回复
// 方法1
// 这里UserClass 必须有一个无参构造函数
// 如果是有参数的需要使用构造起来构造这个对象
object o = Activator.CreateInstance(Type.GetType("Model1." + ClassName + ",test"));

// 获得所有属性,这里能获得Name和Age
PropertyInfo[] pis = o.GetType().GetProperties();
foreach(PropertyInfo info in pis){
switch(info.Name){
case "Name": {
info.SetValue(o, name, null);
break;
}
case "Age": {
info.SetValue(o, Age, null);
break;
}
}
}

Model1.UserClass user = o as Model1.UserClass;

// 方法2
Model1.UserClass u = Activator.CreateInstance(Type.GetType("Model1." + ClassName + ",test")) as Model1.UserClass;

if (u != null) {
u.Name = name;
u.Age = Age;
}
JavaK 2010-01-18
  • 打赏
  • 举报
回复
还有FieldInfo
JavaK 2010-01-18
  • 打赏
  • 举报
回复
所有方法用MethodInfo
fenglei225 2010-01-18
  • 打赏
  • 举报
回复
正解,不用看了,这个就是对的

UserClass user=new UserClass();
PropertyInfo[] pis = user.GetType().GetElementType().GetProperties(); 或者是
PropertyInfo[] pis = user.GetProperties();

foreach (PropertyInfo pi in pis)
{

try
{
object valueName=pi.Name;
object valeProperty=pi.PropertyType;
object value = pi.GetValue(user, null);
}
catch (Exception ex)
{
System.Console.WriteLine(ex.Message);
}
}
hhc123 2010-01-18
  • 打赏
  • 举报
回复

try
{
Form frmCur = null;
Assembly assDLL = Assembly.LoadFrom(Application.StartupPath + "\\" + "信息管理系统.exe");
if (assDLL == null)
MessageBox.Show("找不到文件:" + "TextForm" + "\n需要更新程序。");
frmCur = (Form)assDLL.CreateInstance("信息管理系统.TextForm");
if (frmCur == null)
MessageBox.Show("需要更新程序。");
frmCur.Text = "你好啊";
frmCur.Show();
}

catch
{
MessageBox.Show("加载程序集出错,请联系开发人员!");
}

应该差不多这样子吧
pctuzi 2010-01-18
  • 打赏
  • 举报
回复
typeof(UserClass).GetProperties();
这里面UserClass是类名,如果"UserClass"是字符串,怎么才能反射到类,应用到上面那个语句上?
pctuzi 2010-01-18
  • 打赏
  • 举报
回复
chinesesword的答案帮我向正确的方向进了一步。可以遍历出来所有类的属性。遍历出来的propertyInfo.Name是个字符串,本例返回的是UserName和Age
请教大侠们,如何把"userName"和"Age"这两个字符串,加上string ClassName="UserClass";反射成一个新的类实体myClass.userName这样形式的,谢啦

hhc123的答案就是我在4楼的回帖,那个代码有误~~
chinesesword 2010-01-18
  • 打赏
  • 举报
回复
using System.Reflection;

PropertyInfo[] propertyInfoes = typeof(UserClass).GetProperties();

foreach (PropertyInfo propertyInfo in propertyInfoes)
{
MessageBox.show(propertyInfo.Name);
}
-- 这个可以例举所有属性
pctuzi 2010-01-18
  • 打赏
  • 举报
回复
http://www.cnblogs.com/zjoch/archive/2009/02/23/1396363.html

请看这篇文章《C#利用反射,遍历获得一个类的所有属性名,以及该类的实例的所有属性的值 》只是文章里写的代码有问题,我没有办法实现。

楼上两位朋友,利用反射,是可以遍历一个类的所有属性的。拜托各位大侠了~~
lxl_sports 2010-01-18
  • 打赏
  • 举报
回复
属性是没有序的 除非你直接从你的数据库中得到字段 然后自己构造成你的属性 数据库中获取用户表内容的 存储过程
carathen 2010-01-18
  • 打赏
  • 举报
回复
所有属性要分别获取~~~~~~~~
liherun 2010-01-18
  • 打赏
  • 举报
回复
关注
cjnkd 2010-01-18
  • 打赏
  • 举报
回复
using System.Reflection;

PropertyInfo[] propertyInfoes = typeof(所求类).GetProperties();

foreach (PropertyInfo propertyInfo in propertyInfoes)
{
//propertyInfo.Name);
}
zhjhzf 2010-01-18
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 chinesesword 的回复:]
using System.Reflection;

PropertyInfo[] propertyInfoes = typeof(UserClass).GetProperties();

foreach (PropertyInfo propertyInfo in propertyInfoes)
{
              MessageBox.show(propertyInfo.Name);
}
-- 这个可以例举所有属性
[/Quote]up
加载更多回复(2)

110,538

社区成员

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

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

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