คุณสามารถเขียนวิธี WriteLine ของคุณเอง -
public static void WriteLine<T>(T obj)
{
var t = typeof(T);
var props = t.GetProperties();
StringBuilder sb = new StringBuilder();
foreach (var item in props)
{
sb.Append($"{item.Name}:{item.GetValue(obj,null)}; ");
}
sb.AppendLine();
Console.WriteLine(sb.ToString());
}
ใช้มันเหมือน -
WriteLine(myObject);
ในการเขียนคอลเลกชันเราสามารถใช้ -
var ifaces = t.GetInterfaces();
if (ifaces.Any(o => o.Name.StartsWith("ICollection")))
{
dynamic lst = t.GetMethod("GetEnumerator").Invoke(obj, null);
while (lst.MoveNext())
{
WriteLine(lst.Current);
}
}
วิธีการอาจดูเหมือน -
public static void WriteLine<T>(T obj)
{
var t = typeof(T);
var ifaces = t.GetInterfaces();
if (ifaces.Any(o => o.Name.StartsWith("ICollection")))
{
dynamic lst = t.GetMethod("GetEnumerator").Invoke(obj, null);
while (lst.MoveNext())
{
WriteLine(lst.Current);
}
}
else if (t.GetProperties().Any())
{
var props = t.GetProperties();
StringBuilder sb = new StringBuilder();
foreach (var item in props)
{
sb.Append($"{item.Name}:{item.GetValue(obj, null)}; ");
}
sb.AppendLine();
Console.WriteLine(sb.ToString());
}
}
การใช้if, else if
และตรวจสอบอินเทอร์เฟซแอตทริบิวต์ประเภทฐาน ฯลฯ และการเรียกซ้ำ (เนื่องจากเป็นวิธีการเรียกซ้ำ) ด้วยวิธีนี้เราอาจได้รับวัตถุทิ้ง แต่มันน่าเบื่ออย่างแน่นอน การใช้รถเททิ้งวัตถุจากตัวอย่าง LINQ ของ Microsoft จะช่วยประหยัดเวลาของคุณ