【问题标题】:How to convert a file loop into LINQ?如何将文件循环转换为 LINQ?
【发布时间】:2019-10-15 07:29:51
【问题描述】:

我有一个方法如下:

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 来简化这段代码,但我做不好。

【问题讨论】:

  • return listKateApiObjcts.FirstOrDefault(item =&gt; item.CurrentGatewayClient.Gateway.IpAddress.ToString() == gwIP.ToString())?.CurrentGatewayClient;

标签: c# linq for-loop


【解决方案1】:

您正在寻找FirstOrDefault:

 public static GatewayClient GetCurGwClient(System.Net.IPAddress gwIP) { 
   return listKateApiObjcts
     .Select(item => item.CurrentGatewayClient) 
     .FirstOrDefault(client => client.Gateway.IpAddress.ToString() == gwIP.ToString());
 }

【讨论】:

  • 我不能用这个实现调用 listKateApiObjects。
【解决方案2】:

FirstOrDefault() 返回满足特定条件的第一个元素。如果没有找到满足条件的元素,则返回类型的默认值(引用类型为 null)。您的代码如下所示:

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

【讨论】:

    猜你喜欢
    • 2014-03-16
    • 1970-01-01
    • 1970-01-01
    • 2019-05-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多