我有以下内容;
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/