投げるとそれを検出するために、キャッチ、私は...実行時に、現在の未チェック/チェックされた算術コンテキストを検出することは可能ですか?
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;
}
}
をチェックするために、このようなものを使用することができます...それは、タイトなループでオーバーヘッドがたくさんあります。これを行うには軽い方法がありますか?より多くのコンテキストの
EDIT ...
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)が書かれています。 _あなたは何を解決しようとしていますか? ( 'int.MaxValue'ラウンドトリップを' string'値を送信する点に気にしないでください。なぜそのフィールドを持っていて、なぜそれを初期化するのですか?) –
@PeterDunihoコンパイラはあなたに明らかにオーバーフローさせません。この例では、私はちょうどそれを取り巻いています。 –
@PeterDunihoプリミティブ型と同じセマンティクスを使用したい型を実装しています(この場合変換型演算子はより大きな型からです) –