Kendi WriteLine yönteminizi yazabilirsiniz.
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());
}
Gibi kullanın-
WriteLine(myObject);
Bir koleksiyon yazmak için kullanabileceğimiz-
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);
}
}
Yöntem şöyle görünebilir:
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
Arayüzleri, öznitelikleri, temel türü vb. Kullanmak ve kontrol etmek ve özyinelemeyi (bu özyinelemeli bir yöntem olduğundan) bu şekilde bir nesne dökümü elde edebiliriz, ancak bu kesinlikle sıkıcıdır. Microsoft'un LINQ Örneğindeki nesne damperini kullanmak zamandan tasarruf etmenizi sağlar.