我刚刚安装了新发布的Visual Studio 2017 Enterprise(RC).但是我无法使用Microsoft CodeContracts.我对使用VS2015的CodeContract没有任何问题.我错过了什么吗?
我不知道有多少次我不得不编写代码来验证字符串参数:
public RoomName(string name)
{
if (string.IsNullOrEmpty(name))
{
throw new ArgumentException("Cannot be empty", "name");
}
}
Run Code Online (Sandbox Code Playgroud)
反正有没有避免这个?是否有一些属性或设计合同机制来避免这种情况?有没有办法说:
public RoomName(NotNullOrEmptyString name)
{
Run Code Online (Sandbox Code Playgroud)
而不必实际创建该类型?
背景: 有这个开发人员原则"如果请求的项目不存在,我的函数应该返回null还是抛出异常?" 我不想在这里讨论.我决定为所有必须返回值的情况抛出异常,并且只有在(编程或逻辑)无效请求的情况下才会存在此值.
最后我的问题是: 我可以标记一个函数,以便编译器知道它永远不会返回null并警告任何检查返回值是否为空的人?
C#有Nullable注释吗?
例如在Java中
public @Nullable <T extends BaseJsonClass> T getModel(String saveKey, Class<T> type) {
Run Code Online (Sandbox Code Playgroud)
现在当开发人员试图打电话时
Object.getModel().someMethod()
Run Code Online (Sandbox Code Playgroud)
编译器会警告他们没有检查null.
我知道?C#中var名称末尾的标记,someObject?但问题是当在许多地方使用vars时,它可能是棘手/烦人/ JSON模型.