Możesz napisać własną metodę 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());
}
Użyj tego jak-
WriteLine(myObject);
Aby napisać kolekcję, możemy użyć-
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);
}
}
Metoda może wyglądać następująco:
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());
}
}
Używając if, else if
i sprawdzając interfejsy, atrybuty, typ bazowy itp. Oraz rekurencję (ponieważ jest to metoda rekurencyjna) w ten sposób możemy uzyskać zrzut obiektu, ale na pewno jest to uciążliwe. Korzystanie z obiektu zrzutu z LINQ Sample firmy Microsoft pozwoliłoby zaoszczędzić czas.