【发布时间】:2014-03-08 19:35:49
【问题描述】:
我有班级设置
public class Settings
{
public string A{get;set;}
public bool B {get;set;}
public int C {get;set;}
}
我的另一个类我有设置的属性类型
public class VM
{
public class Settings Settings{get;set;}
}
我想通过反射设置属性设置的值。
我需要将对象的参数类型传递给 InitializeSettings 方法。
public void Init(object viewModel)
{
try
{
PropertyInfo settings = viewModel.GetType().GetProperty("Settings");
PropertyInfo[] settingsProperties = settings.PropertyType.GetProperties();
foreach (PropertyInfo settingsProperty in settingsProperties)
{
object value = //load from app.config
var convertedValue = Convert.ChangeType(value, settingsProperty.PropertyType);
//how set value ???
settingsProperty.SetValue(settings, convertedValue, null);
}
}
catch (Exception exception)
{
throw;
}
}
此示例代码以异常结束
base = {"Object does not match target type."}
我不知道如何在 Init 方法中设置 viewModel.Settings 属性的值?
【问题讨论】:
-
您能否为您使用反射的原因添加一些背景信息?
-
你也永远不会实例化你的类。我感觉你把事情复杂化了一点。您究竟想用这段代码完成什么?
-
我有几个模块,每个模块都是类库。每个模块都有自己的 app.config 和自己的 Setting 类定义(具有不同的属性)。每个模块中也可以有几个 ViewModel。我想在服务模块中有一个服务类,它将为他们的 app.config 中的模块设置设置。
标签: c# reflection properties