Reflection C#从静态属性中获取对象并设置实例属性

时间:2016-05-27 13:21:00

标签: c# reflection instance setvalue

许多例子,例如

Set object property using reflection

实例化没有反射的对象,然后将其与反射一起使用。

但是如何通过反射获得初始对象来实现同样的目标呢?

到目前为止,我的代码是

            var currentMethod = MethodBase.GetCurrentMethod();          
            string currentNamespace = currentMethod.DeclaringType.Namespace;
            string currentType = this.GetType().Name;
            var basetype = this.GetType().Assembly.GetType(currentNamespace + "." + currentType);
            PropertyInfo propertyInfo = basetype.GetProperty("Instance", BindingFlags.Public | BindingFlags.Static);            
            PropertyInfo propertyToSet = basetype.GetProperty(OutputVariableName, BindingFlags.Public | BindingFlags.Instance); 
            var val = propertyInfo.GetValue(propertyToSet, null);
            propertyToSet.SetValue(propertyInfo, Convert.ChangeType(prefix + suffix, propertyToSet.PropertyType), null);

这给出了错误对象与目标类型

不匹配的错误

我也试过

            propertyInfo.SetValue(propertyToSet, Convert.ChangeType(prefix + suffix, propertyToSet.PropertyType), null);

这使得找不到错误的属性集方法。

属性如下所示:

    public static currentType Instance
    {
        get { return instance; }
    }

    public string NewTextName
    {
        get { return _NewTextName; }
        set { _NewTextName = value; }
    }

val的intellisense显示所有属性及其当前值,我希望它只显示名为propertyToSet的属性

此代码的目的是在对象的实例上设置字符串属性。 static属性返回实例,目标是设置NewTextName的值,这是一个非静态属性。

0 个答案:

没有答案