この回答によると、 C# には、C++ コンパイル時のアサートの代わりに使用できる「コード コントラクト」が追加されました。今、私はこの魔法のコードを持っています:
IntPtr pointer;
//blahblahblah
pointer = new IntPtr(pointer.ToInt32() + Marshal.SizeOf(typeof(SomeStruct)));
IntPtr
と同じサイズである必要がありますInt32
。だから私はそのためにコンパイル時のアサートが欲しい - このC++コードのようなもの
static_assert(sizeof(IntPtr)==sizeof(Int32))
だから私は次のことを試しました:
System.Diagnostics.Contracts.Contract.Assert(false); //just to test it
pointer = new IntPtr(pointer.ToInt32() + Marshal.SizeOf(typeof(SomeStruct)));
確かに失敗するようにパスfalse
しAssert()
ますが、コンパイルは問題なくパスします。
では、コード コントラクトを使用してコンパイル時にアサートするにはどうすればよいでしょうか。