版本四支援巢狀屬性存取(Son.Son.Name):
string s4 = p4.ToString4("[Name] 的孫子 [Son.Son.Name] 的生日是:[Son.Son.Brithday: yyyy年MM月dd日]。");
實作關鍵:以 . 分割屬性路徑,迴圈反射逐層取值。
string s5 = p5.ToString5("[Name] 目前有 [Friends: .Count] 個朋友:[Friends: .Name]。");
.Count:回傳集合元素數量.Name:投影每個元素的 Name 屬性並以逗號連接格式語法:[Property: .Operation] 中的前置點號表示集合操作。
if (propertyFormat.StartsWith(".")) {
var subProp = propertyFormat.Substring(1);
var objs = ((IEnumerable)propertyValue).Cast<object>();
if (subProp == "Count") return objs.Count().ToString();
return string.Join(", ", objs.Select(o => o.GetPropertyValue(subProp).ToString()));
}
反射與正則表達式帶來效能損耗,實務應用請加入快取機制。版本六、七可進一步支援索引器、條件判斷等,不再贅述。