小编Mic*_*viš的帖子

在搜索 List<T> 时,为什么 Enumerable.Any(Func<TSource, bool> predicate) 比带有 if 语句的 foreach 慢

最近有件事引起了我的好奇心。

当他们做同样的事情时,为什么Enumerable.Any(Func<TSource, bool> predicate)方法比手动 foreach慢得多?

我一直在搞乱一些基准并想到了这一点。我正在检查List<int>大约位于列表一半的内容和项目。

以下是我对几种不同大小的列表的测试结果:

项目:1 000,搜索项目:543

方法 意思是 比率 已分配 分配比例
福里奇 838.3纳秒 1.00 - 不适用
任何 3,348.8 纳秒 4.05 40乙 不适用

项目:10 000,搜索项目:5 432

方法 意思是 比率 已分配 分配比例
福里奇 7.988 我们 1.00 - 不适用
任何 30.991 我们 3.88 40乙 不适用

项目:100 000,搜索项目:54 321

方法 意思是 比率 已分配 分配比例
福里奇 82.35 我们 1.00 - 不适用
任何 328.86 我们 4.00 40乙 不适用

有两个基准:

  • Foreachforeach带有if语句的手册
  • Any …

c# linq .net-6.0

23
推荐指数
2
解决办法
406
查看次数

如何让重载的 == 运算符与 LINQ 和 EF Core 一起使用?

基本上,我有一个使用 EF Core 的项目。为了在比较两个对象(协议类)是否相等时缩短 lambda,我重写了 Equals 方法并重载了 == 和 != 运算符。然而,LINQ似乎并不关心它,仍然使用引用来确定相等性。谢谢

正如我之前所说,我重写了 Equals 方法并重载了 == 和 != 运算符。没有运气。我还尝试过实现 IEquatable 接口。也没有运气。

我正在使用:EF Core 2.2.4

//协议类

[Key]
public int ProtocolId {get;set;}
public string Repnr {get;set;}
public string Service {get;set;}

public override bool Equals(object obj)
{
    if (obj is Protocol other)
    {
        return this.Equals(other);
    }
    return false;
}

public override int GetHashCode()
{
    return $"{Repnr}-{Service}".GetHashCode();
}

public bool Equals(Protocol other)
{
    return this?.Repnr == other?.Repnr && this?.Service == other?.Service;
}

public static bool …
Run Code Online (Sandbox Code Playgroud)

c# linq equals operator-overloading entity-framework-core

0
推荐指数
1
解决办法
995
查看次数