C#では、現在実行中のコードブロックがチェックされているかチェックされていないモードで実行されているかどうかを検出する方法はありますか?チェックしたかどうかを確認する
たとえば、他の人が使用するライブラリにメソッドがあり、カスタムデータ型で実行している算術演算をオーバーフローするかどうかを決定したい場合。
C#では、現在実行中のコードブロックがチェックされているかチェックされていないモードで実行されているかどうかを検出する方法はありますか?チェックしたかどうかを確認する
たとえば、他の人が使用するライブラリにメソッドがあり、カスタムデータ型で実行している算術演算をオーバーフローするかどうかを決定したい場合。
特定のメソッドがチェックされた演算子またはチェックされていない演算子を使用しているかどうかは、呼び出し元とは関係ありません。コンパイル時には静的に知られています。必要性やポイントがないため動的にチェックする方法はなく、動的に変更することはできません。
あなたが望むようにチェックされた/チェックされていない設定でライブラリをコンパイルしたり、コード内のチェックされた/チェックされていないブロックを使用していれば、コードは問題ありません。使用している演算子を変更するには、ライブラリの呼び出し元。
あなたはあなたのライブラリーの消費者は、あなたがオンまたはオフの操作を使用するかどうかを判断することができるようにしたい場合、あなたは2つのバージョンを配布し、複数の方法(1がチェックされ、チェックを外す1)を提供する必要があるとしていますチェックされていないものとしてコンパイルされたもの、チェックされたもの、またはそれらの行に沿ったものです。実行時に算術演算子がバインドされているコードを変更する方法はありません。
try
... catch
でオーバーフロー操作を実行し、例外が発生するかどうかを確認できますが、それは非常に遅い可能性があります。また、C#言語仕様では、checked/uncheckedはメソッドに対してローカルであり、メソッド外で行われた呼び出しは機能しないことを示しています。
もちろん、ユーザー定義の数値型を組込み算術のように動作させようとしているのであれば、あまり役に立ちません。