7

我正在使用 LINQ .Find(),它在找到匹配项时并没有停止。我有:

List<ipFound> ipList = new List<ipFound>();

ipFound ipTemp = ipList.Find(x => x.ipAddress == srcIP); 

if (ipTemp == null) {
   // this is always null
}

public class ipFound
{
    public System.Net.IPAddress ipAddress;
    public int bytesSent;
    public int bytesReceived;
    public int bytesTotal;
}

有任何想法吗?我要疯了。

谢谢!

4

2 回答 2

13

您需要使用.Equals而不是==.

var a = IPAddress.Parse("1.2.3.4");
var b = IPAddress.Parse("1.2.3.4");
Console.WriteLine(a == b);  // False
Console.WriteLine(a.Equals(b));  // True

在上面的示例中,a == bFalse因为它们是两个不同的对象。但是,a.Equals(b)True因为它们具有相等的值。

于 2012-12-17T17:06:08.323 回答
11

使用IPAddress.Equals而不是比较引用 ( ==):

ipFound ipTemp = ipList.Find(x => x.ipAddress.Equals(srcIP)); 

作为旁注,通常类名是PascalCased( IPFoundvs. ipFound)

示例:http: //ideone.com/lAeiMm

于 2012-12-17T17:06:15.000 回答