现在碰到一个问题,不知道如何给一个程序集的对象的属性赋值,如果只是对一个属性赋值的话很好办,直接Activator.CreateInstance(type)来创建一个Integration实例传进去??就行了,可是我不知道怎么创建Integration.Config的实例.
代码如下:
class Test { public static void GetInfo(string path, string newValue) { //load dll Assembly asm = Assembly.LoadFrom(path); Type type = asm.GetType("Integration"); PropertyInfo piConfig = type.GetProperty("Config", BindingFlags.IgnoreCase | BindingFlags.NonPublic | BindingFlags.Static); PropertyInfo piName = piConfig.PropertyType.GetProperty("Name"); piName.SetValue(??, Convert.ChangeType(newValue, piName.PropertyType), null); } } class Integration { internal static Config Config { get; set; } } class Config { public string Name { get; set; } public string URL { get; set; } }
有大神知道如何解决么?
想要啥效果
就是想给Config.Name赋值
internal static void Update<T>(T source, ref T target) where T : new() { Type info = typeof(T); PropertyInfo[] propertys = info.GetProperties(); foreach (PropertyInfo pi in propertys) { info.GetProperty(pi.Name).SetValue(target, pi.GetValue(source, null), null); } }
以前写的类似的,改改就行了
@Müller:
@alienblog: 你确定这代码是你写的?
??处应该传入指定的类型的实例,按你的代码来看,你应该是想给Integration.Config赋值吧?
嗯,我知道是要传入指定类型的实例,
我现在是想给Config.Name赋值,也就是说要传入Config的实例,可是不知道怎么创建这个实例(要是Integration下的)。
@Müller: 你的访问限定符是internal,只要是相同程序集里的代码都可以设定的啊,new Config不就可以了?
如果你的属性是静态的,??就传入null
如果你的属性是动态的 ??就传入实例对象
http://msdn.microsoft.com/zh-cn/library/vstudio/xb5dd1f1.aspx
谢谢,请问如何得到Config的实例?
传入指定实例,通过反射对其封装属性值!
谢谢,请问如何得到Config的实例?
@Müller: Activator.CreateInstance(type)
这个方法有重载的,你可以看看
@chenping2008: 因为Config这个对象是Integration的一个属性,如果我直接Activator.CreateInstance(typeof(Config))的话,创建出来的是一个和Integration无关的实例,这不是我想要的。