C#如何动态获取类的属性名和值

linchenrr 2014-07-16 08:11:28
as3里面可以通过反射获取到一个类所有的公开属性名、存取器名等信息,并且可以通过字符串方式动态访问它们
比如 var name=obj["propName"]

C#有没有办法实现类似的效果?
...全文
7301 4 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
堂风 2017-03-14
  • 打赏
  • 举报
回复
public class Tree
    {
        //节点文本
        public string Text { get; set; }
        //子节点列表
        public List<BaseData> TreeNodes { get; set; }
        //当前节点对应的数据列表,每个节点对应的数据类型可能不同,有可能是A,有可能是B
        public List<object> Items { get; set; }
    }


    public class BaseData
    {
        public bool IsMatch(string value)
        {
            var ps = this.GetType().GetProperties();
            foreach (var p in ps)
            {
                System.Reflection.PropertyInfo pi = this.GetType().GetProperty(p.Name);
                string _value = pi.GetValue(this, null).ToString();
                if (_value.Contains(value))//----------------条件
                    return true;
            }
            return false;
        }
    }

    public class Data : BaseData
    {
        public string ID { get; set; }
        public string Name { get; set; }
    }

private void button1_Click(object sender, EventArgs e)
        {
            Tree t = new Tree();
            t.TreeNodes = new List<BaseData>();
            for(int i =0; i < 100000; i ++)
            {
                Data d = new Data();
                d.ID = i.ToString();
                d.Name = "Name" + i.ToString();

                t.TreeNodes.Add(d);
            }

            var l = t.TreeNodes.FindAll(p => p.IsMatch("5") == true);
            var l2 = t.TreeNodes.FindAll(p => p.IsMatch("Name") == true);
            
        }
不知道这样行不行,还是用了反射。
xian_wwq 2014-07-16
  • 打赏
  • 举报
回复
引用 1 楼 xian_wwq 的回复:
http://www.cnblogs.com/Sandheart/archive/2013/04/03/2998181.html
引用 2 楼 linchenrr 的回复:
[quote=引用 1 楼 xian_wwq 的回复:] http://www.cnblogs.com/Sandheart/archive/2013/04/03/2998181.html
恩 这个是可以动态获取和赋值了 那遍历出属性名,该如何做呢?[/quote] 对应某个类的实例化的对象tc, 遍历获取所有属性(子成员)的方法

Type t = tc.GetType();//获得该类的Type
//再用Type.GetProperties获得PropertyInfo[],然后就可以用foreach 遍历了
foreach (PropertyInfo pi in t.GetProperties())
{
    object value1 = pi.GetValue(tc, null));//用pi.GetValue获得值
    string name = pi.Name;//获得属性的名字,后面就可以根据名字判断来进行些自己想要的操作
        //进行你想要的操作
}
linchenrr 2014-07-16
  • 打赏
  • 举报
回复
引用 1 楼 xian_wwq 的回复:
http://www.cnblogs.com/Sandheart/archive/2013/04/03/2998181.html
恩 这个是可以动态获取和赋值了 那遍历出属性名,该如何做呢?
xian_wwq 2014-07-16
  • 打赏
  • 举报
回复
http://www.cnblogs.com/Sandheart/archive/2013/04/03/2998181.html

111,089

社区成员

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

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

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