基于这个线程.
上面的答案很棒,但是如何在设计时/编译时获得错误,而不仅仅是在运行时.
如果我说
byte b = 300; //This will not compile.
Run Code Online (Sandbox Code Playgroud)
那我怎么能得到相同的行为呢
PackedValue p = 5000;
Run Code Online (Sandbox Code Playgroud)
或者在这种情况下因为明确
PackedValue p = (PackedValue)5000;
Run Code Online (Sandbox Code Playgroud)
这很困难,但您可能需要查看Code Contracts,这是Visual Studio的扩展,它允许您为代码指定自定义编译时检查.
使用此方法,您可以在运算符声明(包括隐式和显式)中包含行,例如:
Contract.Requires(val < (1<<12));
Run Code Online (Sandbox Code Playgroud)
这将在违反时生成编译时错误,例如上面的示例.