从使用代理搜索不同属性的对象返回属性?

时间:2011-07-01 20:50:22

标签: c# .net delegates

所以,在这个精彩且可能无法理解的标题之后,这是我的问题。 我有这个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";
}));

但是,我不能以这种方式返回Texture属性,除非我创建一个临时的Button对象。

那么,如何通过名称搜索它来返回Texture属性?

3 个答案:

答案 0 :(得分:4)

您可以使用LINQ:

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

如果要处理“不匹配”,可以使用.FirstOrDefault(),如果没有匹配的名称,将导致它返回null。

答案 1 :(得分:1)

易:

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

答案 2 :(得分:0)

如果你能确保你总是拥有你正在寻找的那个,你甚至可以用更少的东西来做.......

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