私がかなり高価な主張をしているとしましょう:
bool IsCompatible(Object x, Object y) {
// do expensive stuff here
}
このアサーションを次のようにテストすると、
Debug.Assert(IsCompatible(x,y));
IsCompatibleはリリースビルドで実行されますか?
私の理解では、Debug.Assertは[Conditional( "DEBUG")]としてマークされており、それへの呼び出しはデバッグビルドでのみ発行されます。ただし、メソッド呼び出しには副作用がある可能性があるため、結果がDebug.Assertに渡されるだけでは出力されないため、これによって式がリリースモードで評価されるのを防ぐことはできないと思います。あれは正しいですか?
私がすべきこと:
#if DEBUG
Debug.Assert(IsCompatible(x,y));
#endif
リリースモードでIsCompatibleのコストを支払わないようにするには?