Лямбда-выражение - добавить в коллекцию, если нет - PullRequest
1 голос
/ 02 декабря 2009

Я только начал изучать лямбда-выражения.

Можно ли еще упростить следующий код:

        Customer customer = Customers.FirstOrDefault(c => c.ID == 3);
        if (customer == null)
        {
            customer = new Customer() { FirstName = "Ben", LastName = "Foster", ID = 3 };
            Customers.Add(customer);
        }

        // do something with customer
        customer.CreateProfile();

По сути, я хочу проверить, существует ли объект в коллекции. Если я не хочу его создавать, добавьте его в коллекцию и используйте позже.

Спасибо Бен

Ответы [ 4 ]

5 голосов
/ 02 декабря 2009

Как написано, кажется, что это не дольше, чем нужно, чтобы он оставался четким и читаемым. Конечно, есть хакерские способы злоупотреблять лямбдами и операторами ??, чтобы написать все это в одной строке, но в конечном итоге они служат только для запутывания кода.

1 голос
/ 02 декабря 2009

Вы можете использовать реализацию Set вместо обычной коллекции.

Взгляните на Iesi.Collections на http://www.surcombe.com/nhibernate-1.2/api/html/N_Iesi_Collections.htm

1 голос
/ 02 декабря 2009

Павел прав. Кроме того, если вы делаете это в цикле, вы захотите использовать HashSet или какой-то другой словарь с Id в качестве ключей для поиска, кроме самой коллекции, чтобы не иметь O (n²) сложность.

1 голос
/ 02 декабря 2009

Это, вероятно, настолько просто, насколько вы можете это понять, но, как сказал Павел, немного глупо писать это в одну строку. Вот это все равно, просто если вам было любопытно.

Customer customer = Customers.FirstOrDefault(c => c.ID == 3).DefaultIfEmpty(new Customer() { FirstName = "Ben", LastName = "Foster", ID = 3 });
customer.CreateProfile();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...