许多例子,例如
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的值,这是一个非静态属性。