我有以下内容;
public static bool Has<T>(this System.Enum type, T value) where T : struct
{
return (((int)(ValueType)type & (int)(ValueType)value) == (int)(ValueType)value);
}
出于某种原因,调用此扩展方法会产生垃圾,我根本无法理解原因。这里的一切都是结构或价值观。那看不见的垃圾在哪里?有没有一些不那么明显的拳击比赛?有没有更好的方法来执行此扩展方法?
答案 0 :(得分:4)
转换为ValueType
有效地装箱对象(注意ValueType
,而“值类型的基类”是类),然后转换为int
取消装箱。如果枚举的基础类型恰好是Int32
以外的其他类型,这也将失败。这也是可能的。
如果没有自定义方法,您应该可以使用Enum.HasFlag
来完成相同的功能。