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不到的情况。 展开
var propertyInfo= A.GetType().GetProperty(B);
propertyInfo.GetType().GetProperty(attribute).SetValue(propertyInfo,"has updated").
但是问题出来,第一不是可以正确get到B的类型,但是在第二步去get "attribute"的时候会出现get不到的情况。
在线等高手~
最后描述有点问题。
第一可以正确get到B的类型,但是在第二步去get "attribute"的时候会出现get不到的情况。 展开
展开全部
这里你把var的实际类型写出来可能会更容易发现问题所在
好吧不卖关子了,这里的var的类型是PropertyInfo,自定义的attribute属性是在哪个类上面?complexB对吧?那你应该调用一个complexB实例的GetType方法,而不是对一个PropertyInfo调用GetType,你这样获取的是PropertyInfo的Type
所以把propertyInfo.GetType()改成propertyInfo.PropertyType就OK啦
好吧不卖关子了,这里的var的类型是PropertyInfo,自定义的attribute属性是在哪个类上面?complexB对吧?那你应该调用一个complexB实例的GetType方法,而不是对一个PropertyInfo调用GetType,你这样获取的是PropertyInfo的Type
所以把propertyInfo.GetType()改成propertyInfo.PropertyType就OK啦
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
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();
}
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
你必须针对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; }
}
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询