说我有以下类层次结构:

public class FooBase
{
    private readonly object _obj;

    protected FooBase(object obj)
    {
        Contract.Requires(obj != null);
        _obj = obj;
    }
}

public class Foo : FooBase
{
    public Foo(object obj) : base(obj)
    {
    }
}


编译时,出现Foo的以下CodeContracts错误:

Error   12  CodeContracts: Missing precondition in an externally visible method. Consider adding Contract.Requires(obj != null); for parameter validation


有什么方法可以使CodeContracts认识到验证已在基类中进行?

最佳答案

不幸的是没有。
您的Foo在没有适当要求的情况下调用FooBase(obj)。

public class FooBase
{
    private readonly object _obj;

    protected FooBase(object obj)
    {
        Contract.Requires(obj != null);
        _obj = obj;
    }
}

public class Foo : FooBase
{
    public Foo(object obj) : base(obj)
    {
        Contract.Requires(obj != null);
    }
}


将是解决此问题的唯一方法。

关于c# - CodeContracts错误地标记缺少基本构造函数中已经存在的前提条件,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30478071/

10-13 02:39