Как преобразовать файловый цикл в LINQ? - PullRequest
1 голос
/ 15 октября 2019

У меня есть следующий метод:

public static GatewayClient GetCurGwClient(System.Net.IPAddress gwIP)
{
    for (int i = 0; i < listKateApiObjcts.Count; i++)
    {
        if (listKateApiObjcts[i].CurrentGatewayClient.Gateway.IpAddress.ToString() == 
            gwIP.ToString())
        {
            return listKateApiObjcts[i].CurrentGatewayClient;
        }
    }

    return null;
}

Я хочу использовать LINQ , чтобы упростить этот фрагмент кода, но я не смог сделать это правильно.

Ответы [ 2 ]

6 голосов
/ 15 октября 2019

Вы ищете FirstOrDefault :

 public static GatewayClient GetCurGwClient(System.Net.IPAddress gwIP) { 
   return listKateApiObjcts
     .Select(item => item.CurrentGatewayClient) 
     .FirstOrDefault(client => client.Gateway.IpAddress.ToString() == gwIP.ToString());
 }
2 голосов
/ 15 октября 2019

FirstOrDefault () возвращает первый элемент, который удовлетворяет определенному условию. Если не найдено ни одного элемента, удовлетворяющего условию, возвращается значение по умолчанию для типа (ноль для ссылочных типов). Ваш код будет выглядеть так:

public static GatewayClient GetCurGwClient(System.Net.IPAddress gwIP)//string
{
    return listKateApiObjcts
      .FirstOrDefault(x => x.CurrentGatewayClient.Gateway.IpAddress.ToString() == gwIP.ToString())
     ?.CurrentGatewayClient;
}
...