最簡單的方法可能是將兩種int
和enum
爲struct
。您可以定義轉換運算符和算術運算符,以更輕鬆地處理您的類型。
例如
struct XNumber {
private enum SpecialValue { Normal, Negative, Infinity}
private int value;
private SpecialValue kind;
public XNumber Infinity = new XNumber { kind = SpecialValue.Infinity };
public XNumber Negative = new XNumber { kind = SpecialValue.Negative };
public static implicit operator XNumber(int value) {
if (value < 0)
return new XNumber { kind = SpecialValue.Negative };
return new XNumber { value = value };
}
// ...
}
類似的東西,根據您的確切需要。
如果您不需要int
的全部範圍,則另一種方法是對無窮大和負值使用特殊值,並且只需要存儲int
。仍然是struct
,您仍然應該定義轉換和運算符,以便一切都相符。雖然你可以通過enum
得到解決,但是正如Wai Ha Lee所說,我不會推薦它,因爲你基本上有一個自己的類型,它有自己的語義(只是這些碰巧在C#中被enum
s支持) 。
你的意思是'var i =(XNumber)-1000;'應該導致'XNumber.NEGATIVE'? – 2015-02-24 05:53:15
如果@JenishRabadiya是正確的,那麼我的回答(雖然不正確)將需要修改。 – 2015-02-24 05:59:35