【发布时间】:2011-02-08 10:15:50
【问题描述】:
我正在尝试使用反射来实现以下目标:
我需要一个方法,我传入一个对象,该方法将递归地用子对象实例化该对象,并使用默认值设置属性。我需要将整个对象实例化到所需的多个级别。
此方法需要能够处理具有多个属性的对象,这些属性将是其他对象的通用列表。
这是我的示例代码(当我得到一个包含List<AnotherSetObjects> 的对象时,我得到一个参数计数不匹配异常:
private void SetPropertyValues(object obj)
{
PropertyInfo[] properties = obj.GetType().GetProperties();
foreach (PropertyInfo property in properties)
{
if (property.PropertyType.IsClass && property.PropertyType != typeof(string) && property.PropertyType.FullName.Contains("BusinessObjects"))
{
Type propType = property.PropertyType;
var subObject = Activator.CreateInstance(propType);
SetPropertyValues(subObject);
property.SetValue(obj, subObject, null);
}
else if (property.PropertyType == typeof(string))
{
property.SetValue(obj, property.Name, null);
}
else if (property.PropertyType == typeof(DateTime))
{
property.SetValue(obj, DateTime.Today, null);
}
else if (property.PropertyType == typeof(int))
{
property.SetValue(obj, 0, null);
}
else if (property.PropertyType == typeof(decimal))
{
property.SetValue(obj, 0, null);
}
}
}
谢谢
【问题讨论】:
-
这将有助于了解您在哪一行得到错误。此外,您似乎只是为类型名称包含 BusinessObjects 的属性创建新对象,不清楚这是否是您的意图。
标签: c# generics reflection recursion