相关疑难解决方法(0)

为什么C#编译器在使用LINQ方法时会创建私有DisplayClass Any()以及如何避免它?

我有这个代码(整个代码并不重要,但可以在这个链接上看到):

internal static class PlayCardActionValidator
{
    public static bool CanPlayCard(...)
    {
        // ...
        var hasBigger =
            playerCards.Any(
                c => c.Suit == otherPlayerCard.Suit
                     && c.GetValue() > otherPlayerCard.GetValue());
        // ...
    }
}
Run Code Online (Sandbox Code Playgroud)

在反编译器(ILSpy)中打开代码后,我注意到<>c__DisplayClass0_0C#编译器存在新创建的类:

在此输入图像描述

如果此代码对系统性能不重要,这对我来说不是问题.此方法被调用数百万次,垃圾收集器正在清理这些<>c__DisplayClass0_0实例,这会降低性能:

在此输入图像描述

在使用该Any方法时,如何避免创建此类(他的实例和垃圾收集)?

为什么C#编译器会创建这个类,有没有Any()我可以使用的替代方法?

c# linq performance instance any

29
推荐指数
2
解决办法
3085
查看次数

标签 统计

any ×1

c# ×1

instance ×1

linq ×1

performance ×1