在上图中,您可以从代码契约(Contract)中看到警告。我认为这不合法,因为this永远不能是null

这是错误还是我错过了什么?

此属性是以下类的成员:

public class NHibernateIQueryableQueryBase<TEntity, TQuery, TQueryInterface>
    : IQuery<TEntity>, IFluentQueryInterface<TEntity, TQueryInterface>
    where TQuery : NHibernateIQueryableQueryBase<TEntity, TQuery,
                                                 TQueryInterface>,
                   TQueryInterface
    where TQueryInterface : IQuery<TEntity>

更新:
将属性更改为以下内容仍会在return result;行上显示警告:
public TQueryInterface And
{
    get
    {
        var result = this as TQuery;
        return result;
    }
}

最佳答案

分析无法理解this可以保证实现TQuery
因此,警告您可能最终将null引用用作接口(interface)类型,并将其作为实现该接口(interface)的struct返回:

您需要将: class添加到TQueryInterface参数的约束中。

关于c# - CodeContracts : false warning "Possibly unboxing a null reference",我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13274102/

10-09 16:05