c# - 枚举扩展生成垃圾

标签 c# enums garbage-collection garbage

我有以下内容;

public static bool Has<T>(this System.Enum type, T value) where T : struct
{
    return (((int)(ValueType)type & (int)(ValueType)value) == (int)(ValueType)value);
}

出于某种原因,调用此扩展方法会生成垃圾,我根本不明白为什么。这里的一切都是结构或值。那些看不见的垃圾在哪里?是不是有什么不那么明显的拳击比赛正在进行?有没有更好的方法来实现这个扩展方法?

最佳答案

转换为 ValueType 有效地装箱了对象(请注意, ValueType ,而“值类型的基类”,是一个),然后进行转换to int 将其拆箱。如果枚举的基础类型恰好是 Int32 以外的类型,这也会失败,这也是可能的。

您应该能够使用Enum.HasFlag无需自定义方法即可完成相同的功能。

关于c# - 枚举扩展生成垃圾,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24831206/

相关文章:

C# 在标签周围绘制圆圈

C# 枚举返回带中断的字符串

c# - xamarin forms 如何将枚举值传递给 XAML 并在 switch 语句中使用它?

go - golang 中的垃圾收集——它是如何发生的?

c# - Windows窗体应用程序中数组的最小元素问题

c# - 纯C#开源PCM到Mp3转换器?

C# 从 SettingsPropertyCollection 获取属性

c++ - 为什么按位 OR 和 AND 逻辑没有按预期工作?

javascript - blob 垃圾收集问题

c# - 是否可以从 .net 线程触发并忘记长时间运行的 SQL 语句(在 SQL Server 2005+ 上)?