우리는 T의 널 참조를 리턴 할 수 있어야하는 일반 메소드가 있다고 가정하고, 따라서 T는 널 입력 가능해야합니다. 이 같은의코드 계약에서 제네릭 형식에 대해 Null 허용 여부를 적용 할 수 있습니까?
종류 :
public static T GetNullableTypeTest<T>()
{
Contract.Requires(!typeof(T).IsValueType || Nullable.GetUnderlyingType(typeof(T)) != null);
return (T)(object)null;
}
CC는 우리가 무엇을하려고 전혀 이해하지 않는 것, 그것은에 "검증되지 않은"경고에 언 박싱 널 및 방법 호출 결과에 대해 불평.
코드 계약에서이 제약 조건을 적용 할 수있는 방법이 있습니까?
이 시나리오에서 [제약 조건은 유용하지 않습니다.] (http://stackoverflow.com/q/19831157/1207195) CC는 해당 호출을 신뢰할 수 없습니다. 당신이 할 수있는 일은 (아마도 "하지 않을 수도") 할 수있는 것은 다른 T 클래스에 대해 별도의 메소드를 가지거나 디버그 빌드 런타임 선언에 만족하는 것입니다. –
@AdrianoRepetti 이것이 CC에 의해 이해되지 않는 이유는 무엇입니까? 우리가 사용할 수있는 평가의 종류에 대한 정식 정의가 있습니까? – Alex
나는 단순히 CC가 _deep_ 함수 호출에서 그것을 이해할 수 없다고 추측한다.이 체크를 대체하기 위해서 당신은'ContractArgumentValidatorAttribute'를 사용할 수있다. (그러나 나는 다시 시도하지 않았다). –