C#反射的问题,困扰了很久

问题我简单的描述一下,就是一个conplex类型A里面定义了一些property和complexB,而complexB里又定义了一些属性,现在我要去反射complexB里... 问题我简单的描述一下,就是一个conplex类型A里面定义了一些property和complex B,而complex B里又定义了一些属性,现在我要去反射complex B里的一个属性"attribute"并update它,以下是我的步骤:
var propertyInfo= A.GetType().GetProperty(B);
propertyInfo.GetType().GetProperty(attribute).SetValue(propertyInfo,"has updated").
但是问题出来,第一不是可以正确get到B的类型,但是在第二步去get "attribute"的时候会出现get不到的情况。
在线等高手~
最后描述有点问题。
第一可以正确get到B的类型,但是在第二步去get "attribute"的时候会出现get不到的情况。
展开
 我来答
一方乐土养生f
2013-08-05 · TA获得超过1044个赞
知道小有建树答主
回答量:691
采纳率:0%
帮助的人:525万
展开全部
这里你把var的实际类型写出来可能会更容易发现问题所在

好吧不卖关子了,这里的var的类型是PropertyInfo,自定义的attribute属性是在哪个类上面?complexB对吧?那你应该调用一个complexB实例的GetType方法,而不是对一个PropertyInfo调用GetType,你这样获取的是PropertyInfo的Type

所以把propertyInfo.GetType()改成propertyInfo.PropertyType就OK啦
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
清水栞
2013-08-05 · TA获得超过1547个赞
知道小有建树答主
回答量:1538
采纳率:50%
帮助的人:987万
展开全部
using System;
using System.Reflection;
namespace CSharpCon
{
    class Program
    {
        static void Main(string[] args)
        {
            conplex a = new conplex();
            PropertyInfo pInfo = a.GetType().GetProperty("B");
            PropertyInfo pInfo_Att = pInfo.PropertyType.GetProperty("Attribute");
            pInfo_Att.SetValue(a.B, "abcdefG", null);
        }
    }
}
public class Complex
{
    private String attribute;
    public String Attribute
    {
        get { return attribute; }
        set { attribute = value; }
    }
}
public class conplex
{
    private Complex b;
    public Complex B
    {
        get { return b; }
        set { b = value; }
    }
    public conplex()
    {
        b = new Complex();
    }
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
哲事姓无
2013-08-05 · TA获得超过1176个赞
知道小有建树答主
回答量:903
采纳率:100%
帮助的人:446万
展开全部

你必须针对B的对象SetValue。象下面这样

   [STAThread]
    public static void Main(string[] args)
    {
        var a = new Conplex();
        a.B = new Complex();
        a.B.Attribute = "测试1";

        Console.WriteLine("设置前:" + a.B.Attribute);
        var bPropertyInfo = a.GetType().GetProperty("B");
        var bObj = bPropertyInfo.GetValue(a);
        var attrPropertyInfo = bObj.GetType().GetProperty("Attribute");
        attrPropertyInfo.SetValue(bObj, "has updated"); //<-- 重点在这里,针对bObj进行设置

        Console.WriteLine("设置后:" + a.B.Attribute);

        Console.ReadKey();

        /* 返回如下值:
         设置前:测试1
         设置后:has updated
         */
    }

    class Conplex
    {
        public Complex B { get; set; }
    }

    class Complex
    {
        public string Attribute { get; set; }
    }
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式