C# 联合合同:虚假警告“;可能取消绑定空引用“;
在上图中,您可以看到来自代码契约的警告。我认为这是不合法的,因为C# 联合合同:虚假警告“;可能取消绑定空引用“;,c#,.net,code-contracts,C#,.net,Code Contracts,在上图中,您可以看到来自代码契约的警告。我认为这是不合法的,因为这个永远不可能是空的 这是一个错误还是我遗漏了什么 此属性是以下类的成员: public class NHibernateIQueryableQueryBase<TEntity, TQuery, TQueryInterface> : IQuery<TEntity>, IFluentQueryInterface<TEntity, TQueryInterface> where TQu
这个
永远不可能是空的
这是一个错误还是我遗漏了什么
此属性是以下类的成员:
public class NHibernateIQueryableQueryBase<TEntity, TQuery, TQueryInterface>
: IQuery<TEntity>, IFluentQueryInterface<TEntity, TQueryInterface>
where TQuery : NHibernateIQueryableQueryBase<TEntity, TQuery,
TQueryInterface>,
TQueryInterface
where TQueryInterface : IQuery<TEntity>
基于,我想说您需要指定如果强制转换失败会发生什么
尝试
将其作为TQuery返回,因为如果强制转换失败,as
操作符将返回null,而显式强制转换将抛出错误。分析不理解此保证实现TQuery
因此,它警告您,您最终可能会获取接口类型的null
引用,并将其作为实现该接口的struct
返回:
您需要将:class
添加到TQueryInterface
参数的约束中。在黑暗中完成拍摄,因为我是一个noob,我相信您已经想到了这一点,但是TQuery的强制转换(this)不能返回null吗?请向我们展示您的类型声明。您对这些通用参数有什么限制?@JesseCarter:没有。它可能会导致InvalidCastException,所以我认为这不是警告的原因。@SLaks:更新了问题。我担心这相当复杂,但基本上可以保证强制转换将始终成功。我怀疑向约束添加:class
将抑制警告。
public TQueryInterface And
{
get
{
var result = this as TQuery;
return result;
}
}