2016-12-03 107 views
1

我想知道如果鑄造枚舉將框枚舉或不是枚舉枚舉拳擊或只需鍵入鑄造

所以我應該寫表達濃郁的成員,以減少我的對象的大小。

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. 

假設我有數千個實例。而這個屬性大約用了6萬次。

+1

爲了避免重複代碼,你可能需要使用你的第二個選項和定義類型爲'公衆覆蓋枚舉類型{獲得; } => FruitType;'。抖動可能會嵌入「FruitType」獲取器中,所以不應該有性能損失。 – Heinzi

+0

有趣的一點。沒有想到抖動。如果抖動足夠聰明,它可能能夠以其他方式進行優化。 'Fruit FruitType =>(Fruit)Type;'Type'基本上變成'(Fruit)(Data [0]&0xF0)'@Heinzi –

回答

1

是的,價值是盒裝的。的the C# spec狀態

第4.3.1節「裝箱轉換」:

裝箱轉換允許值類型被隱式轉換爲引用類型。在存在下列裝箱轉換:

[...]

  • 從任何枚舉類型的類型System.Enum

[...]