// ❌ 錯誤:無 0 值
public enum Planet
{
Mercury = 1, Venus = 2, Earth = 3, Mars = 4,
Jupiter = 5, Saturn = 6, Neptune = 7, Uranus = 8, Pluto = 9
}
Planet p = new Planet(); // p = 0 → 無效值!
// ✅ 正確:加入 None = 0
public enum Planet
{
None = 0,
Mercury = 1, Venus = 2, Earth = 3, Mars = 4,
Jupiter = 5, Saturn = 6, Neptune = 7, Uranus = 8, Pluto = 9
}
Planet p = new Planet(); // p = Planet.None → 有效預設值
public readonly struct ObservationData
{
public Planet Target { get; }
public double Magnitude { get; }
public ObservationData(Planet target, double magnitude)
{
Target = target;
Magnitude = magnitude;
}
}
// 使用
var obs = new ObservationData(Planet.Mars, -1.5); // 明確初始化
// 預設 new ObservationData() 仍會產生 Target=None, Magnitude=0
[Flags]
public enum Styles
{
None = 0, // 必須為 0
Flat = 1, // 2^0
Sunken = 2, // 2^1
Raised = 4 // 2^2
}
// 位元運算檢查
if ((style & Styles.Flat) != 0) // 若 Flat=0 則永遠 false!
DoFlatThings();
None = 0 代表「無旗標」,位元運算才正確運作。
None = 0 或等價語意值Flags 列舉強制要求 None = 0new T()