Вернуть свойство из объекта, найденного с помощью делегата, который ищет другое свойство? - PullRequest
3 голосов
/ 02 июля 2011

Итак, после этого замечательного и, вероятно, невозможного для понимания названия, вот моя проблема.У меня есть объект Button:

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

Я держу список всех кнопок в List<Button> buttons.В какой-то момент кода мне нужно вернуть свойство Texture из Button.Я не могу быть уверен в его значении, поэтому не могу найти кнопку по значению текстуры.Мне нужно найти его имя.В настоящее время я использую делегат:

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

Однако я не могу вернуть свойство текстуры таким образом, если не создаю временный объект Button.

Итак, как бы я вернулсясвойство Texture, ища его по его Имени?

Ответы [ 3 ]

4 голосов
/ 02 июля 2011

Вы можете использовать LINQ:

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

Если вы хотите обработать «нет совпадений», вы можете использовать .FirstOrDefault(), что приведет к тому, что он вернет ноль, если не найдено подходящего имени.*

1 голос
/ 02 июля 2011

Легко:

Texture2D t = buttons.Where(x => x.Name == givenName).Select(x => x.Texture).FirstOrDefault();
0 голосов
/ 02 июля 2011

Если вы можете гарантировать, что у вас всегда будет тот, который вы ищете, вы могли бы сделать это с меньшими затратами .......

var tex = buttons.First(x => x.Name == givenName).First().Texture;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...