C# を使用して Unity3D の開発を行っていますが、アサート機能があると便利だと判断しました。(Unity3D では、System.Diagnostics.Debug.Assert
存在しますが、何もしません。)
主に C++ で作業する開発者として、私はプリプロセッサの文字列化演算子を使用してアサートされた式を含むメッセージをアサートすることに慣れています。つまり、フォームのアサーションが失敗した場合ASSERT(x > 0, "x should not be zero.")
、実行時に表示されるメッセージ message にテキスト "x > 0" が含まれる場合があります。C#でも同じことができるようになりたいです。
私は ConditionalAttribute と DebuggerHiddenAttribute を認識しており、両方を使用しています (ただし、後者は Unity にバンドルされている MonoDevelop のカスタム ビルドでは無視されているようです)。この問題の解決策を探しているときに、私System.Runtime.CompilerServices
が行おうとしていることに関連していると思われる名前空間の 3 つの属性に出くわしました: CallerFilePathAttribute、CallerLineNumberAttribute、および CallerMemberNameAttribute。(私の実装では、代わりにSystem.Diagnostics.StackTrace
withを使用しfNeedFileInfo == true
ます。)
C ++で慣れているのと同じ機能を実現するのに役立つリフレクションマジック(可能性は低いようです)または属性マジック(可能性が少し高いようです)があるかどうか疑問に思っています。