CodeContracts:错误警告“可能取消装箱空引用”

时间:2012-11-07 16:36:54

标签: c# .net code-contracts

enter image description here

在上图中,您可以看到代码合同中的警告。我不认为这是合法的,因为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;
    }
}

2 个答案:

答案 0 :(得分:1)

分析无法理解this是否有效实施TQuery 因此,它警告您最终可能会对接口类型进行null引用,并将其作为实现该接口的struct返回:

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

答案 1 :(得分:0)

基于this question,我要说你需要指定如果演员失败会发生什么。

尝试return this as TQuery,因为如果转换失败,as运算符将返回null,而显式转换会抛出错误。