我嘗試用一個例子來說明這一點:更好的辦法從財產的子對象返回值時childobject可以爲空
public class Player
{
public string FirstName {get; set;}
public Team Team {get; set;}
}
public class Team
{
public string Name {get; set;}
}
現在我要地圖玩家一個PlayerVM(視圖模型)
public class PlayerVM
{
public string PlayerFirstName {get; set;}
public string TeamName {get; set;}
}
因此,代碼是一樣的東西:
public List<PlayerVM> GetPlayers()
{
// Lazy loading enabled,
// so the Team child objects (if present, will be retrieved)
var players = Database.GetPlayers();
var list = new List<PlayerVM>();
foreach (var player in players)
{
var vm = new PlayerVM();
vm.PlayerFirstName = player.FirstName;
if (player.Team != null)
{
vm.TeamName = player.Team.Name;
}
else
{
vm.TeamName = "-- no team --";
}
list.Add(vm);
}
return list;
}
我想更換
if (player.Team != null)
{
vm.TeamName = player.Team.Name;
}
else
{
vm.TeamName = "-- no team --";
}
通過類似:
vm.TeamName = Utils.GetProperty<Player>(p => p.Team.Name, "-- no team --");
這是可能使用通用蘭巴/ FUNC表情?
< <編輯>>
感謝您的答案,我知道我可以使用oneliners,但我實際上是尋找訪問嵌套子對象的通用方式。 (嵌套可能是X級深...)
string countryName = Utils.GetProperty<Player>(p => p.Team.Country.Name, "-- no country --");
如何做到這一點?
< <編輯2 >> 一個可能的解決辦法來使用此代碼 http://code.google.com/p/gim-projects/source/browse/presentations/CantDanceTheLambda/src/MemberNameParser.cs
像「Team.Country.Name」的字符串轉換函數功能表達。
然後使用反射來訪問屬性。
這不是你的問題的直接解決方案 - 因此我只有com對它的評論。這裏真正的問題是'null'值。恕我直言,真正的解決方案不是 - 使用null作爲有效的結果/值。而是實現空對象模式:http://en.wikipedia.org/wiki/Null_Object_pattern – Carsten
是的這是可能的,但不是直接與泛型,但與表達式/反思和它的相關成本 - 如果你intertted我可能會插入一些代碼一起但我不會去這條路線(性能) - WPF正在做類似的東西 – Carsten