2012-11-07 2 views
6

enter image description hereCodeContracts : 거짓 경고 위의 이미지에서

"아마도 null 참조를 개봉기", 당신은 코드 계약에서 경고를 볼 수 있습니다. 나는 이것이 합법이라고 생각하지 않습니다. this은 결코 null이 될 수 없습니다.

이 버그는 무엇입니까? 아니면 누락 되었습니까?

: 라인 return result;에 - 여전히 경고가 표시
다음에 속성을 변경 :

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

업데이트 :


이 속성은 다음과 같은 클래스의 멤버

public TQueryInterface And 
{ 
    get 
    { 
     var result = this as TQuery; 
     return result; 
    } 
} 
+0

어둠 속에서 완벽한 샷 나는 멍청한 놈이다. 나는 당신이 그것을 생각했지만 TQuery (this)의 캐스트가 null을 반환하지 못했을 것이라고 확신한다. –

+0

유형 신고서를 보여주십시오. 이러한 일반 매개 변수에는 어떤 제약이 있습니까? – SLaks

+0

@JesseCarter : 아니요. InvalidCastException이 발생할 수 있으므로 경고 이유가 아닙니다. –

답변

1

thisTQuery을 구현한다는 것을 분석 할 수 없습니다.
따라서, 당신이 인터페이스 유형에 null 참조를 복용 끝날 수도 있음을 경고하고, 그 인터페이스를 구현하는 struct로 돌아 오는 것 :

당신은 TQueryInterface 매개 변수의 제약으로 : class를 추가해야합니다.

0

this question을 기반으로 할 때, 캐스트가 실패하면 무슨 일이 벌어 지는지 확인하십시오.

as 연산자는 캐스트가 실패하면 null을 반환하고 명시 적 캐스트는 오류를 반환하므로 return this as TQuery을 시도하십시오.

+0

내 업데이트를 참조하십시오. 도움이되지 않습니다. –