合同无效
Contract doesn't work
我遇到了 System.Diagnostics.Contracts
的问题。
如果我使用 Contract.Requires(condition)
,那么一切都会按预期工作。
但是我需要一个自定义异常,所以我尝试了 Contract.Requires<ToShortException>(condition)
.
当 condition
为假时,我期待 ToShortException
但我什么也没得到。在我可以看到的调试器中,这一行被忽略了。
ToShortException
是一个 public class,它实现了 Exception
并且有 3 个 public 构造函数。
有人知道我做错了什么吗?
异常class:
public class ToShortException : Exception
{
public ToShortException()
{
}
public ToShortException(string message) : base(message)
{
}
public ToShortException(string message, Exception inner) : base(message, inner)
{
}
}
方法class:
public IDictionary<string, string> getIncident(string name)
{
Contract.Requires(!string.IsNullOrWhiteSpace(name)); //works fine
Contract.Requires<ToShortException>(name.Length == 7); //got not checked
return _original.getIncident(name);
}
我找到了解决方案。 "Project Settings -> Code Contracts -> Assembly Mode" 必须是 "Standard Contract Requires".
默认值为 "Custom Parameter Validation"。
我遇到了 System.Diagnostics.Contracts
的问题。
如果我使用 Contract.Requires(condition)
,那么一切都会按预期工作。
但是我需要一个自定义异常,所以我尝试了 Contract.Requires<ToShortException>(condition)
.
当 condition
为假时,我期待 ToShortException
但我什么也没得到。在我可以看到的调试器中,这一行被忽略了。
ToShortException
是一个 public class,它实现了 Exception
并且有 3 个 public 构造函数。
有人知道我做错了什么吗?
异常class:
public class ToShortException : Exception
{
public ToShortException()
{
}
public ToShortException(string message) : base(message)
{
}
public ToShortException(string message, Exception inner) : base(message, inner)
{
}
}
方法class:
public IDictionary<string, string> getIncident(string name)
{
Contract.Requires(!string.IsNullOrWhiteSpace(name)); //works fine
Contract.Requires<ToShortException>(name.Length == 7); //got not checked
return _original.getIncident(name);
}
我找到了解决方案。 "Project Settings -> Code Contracts -> Assembly Mode" 必须是 "Standard Contract Requires".
默认值为 "Custom Parameter Validation"。