枚举扩展生成垃圾

时间:2014-07-18 18:05:02

标签: 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);
}

出于某种原因,调用此扩展方法会产生垃圾,我根本无法理解原因。这里的一切都是结构或价值观。那看不见的垃圾在哪里?有没有一些不那么明显的拳击比赛?有没有更好的方法来执行此扩展方法?

1 个答案:

答案 0 :(得分:4)

转换为ValueType有效地装箱对象(注意ValueType,而“值类型的基类”是),然后转换为int取消装箱。如果枚举的基础类型恰好是Int32以外的其他类型,这也将失败。这也是可能的。

如果没有自定义方法,您应该可以使用Enum.HasFlag来完成相同的功能。