Измените длинную инструкцию if на LINQ - PullRequest
1 голос
/ 13 апреля 2011

Я написал эту проверку в C # для выполнения некоторой проверки значения:

           if ((x <= 20 && y <= 5) || (x <= 30 && y <= 10) ||
           (x <= 50 && y <= 15) || (x <= 70 && y <= 20) ||
           (x <= 70 && y <= 30))
             {
                // do something
              }

Я нахожусь в процессе изучения LINQ, и я хотел бы изменить приведенный выше код для использования LINQ,

Если вы отправите код, пожалуйста, добавьте комментарий для объяснения конверсии.

Ответы [ 2 ]

3 голосов
/ 13 апреля 2011

Если вы действительно хотите использовать LINQ, одним из способов будет сохранение коллекции кортежей, которые представляют каждый из случаев (верхние границы), а затем используйте Enumerable.Any метод проверки, если пара (x, y) удовлетворяет любому из возможных условий.

Пример (на самом деле вы можете создать коллекцию один раз и продлить срок ее службы, возможно, с помощью ссылки на поле):

var bounds = new Dictionary<int, int>
{
    {20, 5},
    {30, 10},
    {50, 15},
    {70, 20},
    {70, 30}
}.Select(kvp => new { XUpperBound = kvp.Key, YUpperBound = kvp.Value });


if (bounds.Any(tuple => x <= tuple.XUpperBound && y <= tuple.YUpperBound))
{
    ...
}
2 голосов
/ 13 апреля 2011

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

Чтобы оно выглядело лучше, просто отформатируйте код:

if  (
    (x <= 20 && y <= 5) || 
    (x <= 30 && y <= 10) ||
    (x <= 50 && y <= 15) || 
    (x <= 70 && y <= 20) ||
    (x <= 70 && y <= 30)
    )
        {
            // do something
        }

Это должно прояснить ваши пары, упростить добавление условий, не добавляя накладные расходы LINQ только ради его использования.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...