带有设计时检查的C#中的新类型

Pie*_*ter 4 c# types

基于这个线程.

定义"自定义"基于整数的类型?

上面的答案很棒,但是如何在设计时/编译时获得错误,而不仅仅是在运行时.

如果我说

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)

Nei*_*l T 5

这很困难,但您可能需要查看Code Contracts,这是Visual Studio的扩展,它允许您为代码指定自定义编译时检查.

使用此方法,您可以在运算符声明(包括隐式和显式)中包含行,例如:

Contract.Requires(val < (1<<12));
Run Code Online (Sandbox Code Playgroud)

这将在违反时生成编译时错误,例如上面的示例.