首页 新闻 会员 周边

通过反射给对象的对象的属性赋值

0
悬赏园豆:10 [已关闭问题] 关闭于 2013-06-26 10:50

现在碰到一个问题,不知道如何给一个程序集的对象的属性赋值,如果只是对一个属性赋值的话很好办,直接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; }
    }

有大神知道如何解决么?

Müller的主页 Müller | 初学一级 | 园豆:122
提问于:2012-12-21 11:47
< >
分享
所有回答(4)
0

想要啥效果

alienblog | 园豆:332 (菜鸟二级) | 2012-12-21 11:50

就是想给Config.Name赋值

支持(0) 反对(0) Müller | 园豆:122 (初学一级) | 2012-12-21 13:44
        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: 

支持(0) 反对(0) alienblog | 园豆:332 (菜鸟二级) | 2012-12-21 16:15

@alienblog: 你确定这代码是你写的?

支持(0) 反对(0) doublefish | 园豆:200 (初学一级) | 2014-08-29 15:18
0

??处应该传入指定的类型的实例,按你的代码来看,你应该是想给Integration.Config赋值吧?

I,Robot | 园豆:9783 (大侠五级) | 2012-12-21 12:14

嗯,我知道是要传入指定类型的实例,

我现在是想给Config.Name赋值,也就是说要传入Config的实例,可是不知道怎么创建这个实例(要是Integration下的)。

支持(0) 反对(0) Müller | 园豆:122 (初学一级) | 2012-12-21 13:45

@Müller: 你的访问限定符是internal,只要是相同程序集里的代码都可以设定的啊,new Config不就可以了?

支持(0) 反对(0) I,Robot | 园豆:9783 (大侠五级) | 2012-12-21 18:54
0

如果你的属性是静态的,??就传入null

如果你的属性是动态的 ??就传入实例对象

http://msdn.microsoft.com/zh-cn/library/vstudio/xb5dd1f1.aspx

chenping2008 | 园豆:9836 (大侠五级) | 2012-12-21 12:59

谢谢,请问如何得到Config的实例?

支持(0) 反对(0) Müller | 园豆:122 (初学一级) | 2012-12-21 13:48
0

传入指定实例,通过反射对其封装属性值!

Beyond-bit | 园豆:2885 (老鸟四级) | 2012-12-21 13:00

谢谢,请问如何得到Config的实例?

支持(0) 反对(0) Müller | 园豆:122 (初学一级) | 2012-12-21 13:48

@Müller: Activator.CreateInstance(type)

这个方法有重载的,你可以看看

支持(0) 反对(0) chenping2008 | 园豆:9836 (大侠五级) | 2012-12-21 14:14

@chenping2008: 因为Config这个对象是Integration的一个属性,如果我直接Activator.CreateInstance(typeof(Config))的话,创建出来的是一个和Integration无关的实例,这不是我想要的。

支持(0) 反对(0) Müller | 园豆:122 (初学一级) | 2012-12-21 16:09
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册