문제

메소드가 널을 반환하지 않는다는 것을 어떻게 표시합니까? 현재 이것은 내 코드입니다.

CreateEfunction이 결과가 아무것도 아니라고 가정하더라도 19 행은 입증되지 않은 메시지를 보장합니다.

1         <Pure()> Public Function CreateFunction(Of TArg1, TArg2, TResult)(ByVal body As Func(Of Expression, Expression, BinaryExpression)) As Func(Of TArg1, TArg2, TResult)   
2             Contract.RequiresAlways(body IsNot Nothing)   
3             Contract.Assume(Contract.Result(Of Func(Of TArg1, TArg2, TResult))() IsNot Nothing)   
4   
5             Dim arg1 = Expression.Parameter(GetType(Integer), "arg1")   
6             Dim arg2 = Expression.Parameter(GetType(Integer), "arg2")   
7   
8   
9             Dim temp = Expression.Lambda(body(arg1, arg2), arg1, arg2)   
10             Contract.Assume(temp IsNot Nothing)   
11             Return DirectCast(temp.Compile, Global.System.Func(Of TArg1, TArg2, TResult))   
12         End Function  
13   
14         <Pure()> Public Function Add() As Func(Of T, T, T)   
15             Contract.Ensures(Contract.Result(Of Func(Of T, T, T))() IsNot Nothing)   
16   
17             Dim temp = CreateFunction(Of T, T, T)(AddressOf Expression.AddChecked)   
18             Return temp   
19         End Function  
도움이 되었습니까?

해결책

하다

Contract.Ensures(Contract.Result() != null);

일하다? 기본적으로, 나는 당신이 예상대로 작동하지 않는 가장 간단한 케이스를 찾을 때까지 그것을 아래로 내려 놓을 것입니다.

- Markusq

다른 팁

당신은 변경해야합니다 Assume 안에 CreateFunction an Ensures. 그 후에는 괜찮을 것입니다. 기억하다, Assume 정적 검사기를 로컬로 돕기 위해 내부 가정입니다. 다른 방법에서는 보이지 않습니다. 뿐 Requires 그리고 Ensures 간과 계약입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top