枚举类型转换是枚举到Enum的装箱还是类型转换?

3
我想知道将枚举转换为Enum是否会装箱。
因此,我是否应该编写表达式主体成员来减小对象的大小。
public Fruit FruitType => (Fruit) Type; // unboxing?
public override Enum Type => (Fruit) (Data[0] & 0xF0); // boxing?

是否具有防止装箱和拆箱的属性?

public Fruit FruitType => (Fruit) (Data[0] & 0xF0);
public override Enum Type { get; } = (Fruit) (Data[0] & 0xF0); // assigned once.

假设我有成千上万个实例,并且该属性被使用了约60,000次。


1
为了避免代码重复,您可能想使用第二个选项并将Type定义为public override Enum Type { get; } => FruitType;。Jitter可能会内联FruitType getter,因此不应该有性能损失。 - Heinzi
有趣的一点,没想到还有“jitter”的问题。如果“jitter”够智能的话,它也许可以通过其他方式进行优化。public Fruit FruitType => (Fruit) Type; 这里的Type基本上会变成(Fruit) (Data[0] & 0xF0)。@Heinzi - M.kazem Akhgary
1个回答

4

是的,这个值被装箱了。

C#规范的4.3.1节“装箱转换”说明:

装箱转换允许将值类型隐式地转换为引用类型。以下装箱转换存在:

[...]

  • 从任何枚举类型到类型System.Enum

[...]


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接