Учитывая следующие объекты:
public class Customer {
    public String Name { get; set; }
    public String Address { get; set; }
}
public class Invoice {
    public String ID { get; set; }
    public DateTime Date { get; set; }
    public Customer BillTo { get; set; }
}
Я хотел бы использовать отражение, чтобы пройти через Invoice, чтобы получить свойство Name объекта Customer. Вот что мне нужно, предполагая, что этот код будет работать:
Invoice inv = GetDesiredInvoice();  // magic method to get an invoice
PropertyInfo info = inv.GetType().GetProperty("BillTo.Address");
Object val = info.GetValue(inv, null);
Конечно, это не работает, поскольку "BillTo.Address" не является допустимым свойством класса Invoice.
Итак, я попробовал написать метод, чтобы разделить строку на части на период, и ходить по объектам, которые ищут конечное значение, которое меня интересует. Это работает нормально, но мне это не совсем удобно:
public Object GetPropValue(String name, Object obj) {
    foreach (String part in name.Split('.')) {
        if (obj == null) { return null; }
        Type type = obj.GetType();
        PropertyInfo info = type.GetProperty(part);
        if (info == null) { return null; }
        obj = info.GetValue(obj, null);
    }
    return obj;
}
Любые идеи о том, как улучшить этот метод, или лучший способ решить эту проблему?
ИЗМЕНИТЬ после публикации, я увидел несколько связанных сообщений... Однако, похоже, нет ответа, который специально решает этот вопрос. Кроме того, мне все равно нравятся отзывы о моей реализации.