0
我可以用這樣的檢查......是否可以在運行時檢測當前未檢查/已檢查的算術上下文?
private static readonly int IntMaxValue = int.Parse(int.MaxValue.ToString());
private static bool IsChecked()
{
try {
var i = (IntMaxValue + 1);
return false;
}
catch (OverflowException) {
return true;
}
}
...但是這是一個很大的開銷在緊密循環,拋出和捕獲只是檢測到它。有沒有更簡單的方法來做到這一點?
編輯更多的背景...
struct NarrowChar
{
private readonly Byte b;
public static implicit operator NarrowChar(Char c) => new NarrowChar(c);
public NarrowChar(Char c)
{
if (c > Byte.MaxValue)
if (IsCheckedContext())
throw new OverflowException();
else
b = 0; // since ideally I don't want to have a non-sensical value
b = (Byte)c;
}
}
如果答案僅僅是「不」,不要怕簡單地說:)
這有[XY問題](http://meta.stackexchange.com/questions/66377/what-is-the-xy-problem)寫在它的全部。你最近想要解決什麼問題? (不要介意通過一個'string'值發送'int.MaxValue'往返傳輸的意義是什麼?爲什麼要使用這個字段?爲什麼要這樣初始化?) –
@PeterDuniho編譯器不會讓你明顯溢出。我只是在例子中解決這個問題。 –
@PeterDuniho @PeterDuniho @PeterDuniho @PeterDuniho @PeterDuniho我在實現一個類型,我希望與原始類型具有相同的語義(在這種情況下,它是一個更大類型的轉換運算符) –