2011-07-01 62 views
3

所以,在這個美妙的,可能不可能理解標題後,這是我的問題。 我有這個Button對象:從使用委託搜索其他屬性的對象中返回屬性?

class Button 
{ 
    public Texture2D Texture {get;set;} 
    public string Name {get;set;} 
    ... 
} 

我手裏拿的List<Button> buttons所有按鈕的列表。在代碼中的某處,我需要從Button中返回Texture屬性。我無法確定它的價值,所以我無法從它的紋理值中搜索按鈕。我需要搜索它的名字。我目前使用的委託:

SomeMethod(buttons.Find(delegate (Button btn) 
{ 
    return btn.Name = "Title"; 
})); 

但是,我不能返回紋理屬性這樣,除非我創建一個臨時Button對象。

那麼,如何通過搜索其名稱來返回Texture屬性?

回答

4

你可以使用LINQ:

Texture2D theTexture = buttons 
         .Where(b => b.Name = "Title") 
         .Select(b => b.Texture) 
         .First(); 

如果你想處理「不匹配」,則可以使用.FirstOrDefault(),這將導致它返回null如果沒有匹配的名稱。

+0

沒錯,有效。謝謝 ! – pikzen

1

簡單:

Texture2D t = buttons.Where(x => x.Name == givenName).Select(x => x.Texture).FirstOrDefault(); 
0

如果你能確保你總是有你正在尋找你甚至可以用更少做到這一點的一個.......

var tex = buttons.First(x => x.Name == givenName).First().Texture;