我想遞歸構建一個複雜的對象。遞歸創建自定義複合對象
public class Name
{
public string firstName {get;set;}
public string lastName {get;set;}
}
public class Address
{
public string city {get;set;}
public string state {get;set;}
public string street {get;set;}
public string zip {get;set;}
}
public class Customer
{
public Name customerName {get;set;}
public Address customerAddress {get;set;}
public Guid id {get;set;}
}
讓我們說,客戶生活在一個大會,我加載在飛行:) 我想實例化一個Customer類型的,填充它的屬性。 Customer對象具有更多自定義對象和Guid屬性。我如何使用遞歸來創建Customer對象及其嵌套對象。我在下面有一些代碼,我偶然發現我應該使用遞歸。
static object TraversePropertyInfo(object obj, Assembly assembly)
{
Console.WriteLine(obj.GetType().Name);
foreach(PropertyInfo pi in obj.GetType().GetProperties())
{
if(pi.PropertyType.IsClass && pi.PropertyType.Namespace != "System")
{
if(pi.PropertyType.UnderlyingSystemType.GenericTypeArguments.Count() > 0)
{
Console.WriteLine("\tIList<{0}>", pi.Name);
}
else
{
Console.WriteLine("\t{0}\t<class>", pi.Name);
object child = Activator.CreateInstance(assembly.GetType(pi.PropertyType.FullName)); // create the child instance
obj.GetType().GetProperty(pi.Name).SetValue(obj, child); // set the child on the parent
// but the child can have children...
// I should be using recurrsion here
}
}
else
{
Console.WriteLine("\t{0}\t{1}", pi.Name, pi.PropertyType);
}
}
return obj;
}
是否有任何的類都有一個構造函數,需要在參數? – dustinmoris 2015-03-02 16:51:36
沒有任何類都沒有構造函數,在foreach循環中返回的參數 – Mateo 2015-03-02 16:54:42