どのように私はこの方法は、コードの契約を使用してヌルを返すことはありませんことを示しているのですか?

StackOverflow https://stackoverflow.com/questions/587452

質問

どのように私は、メソッドがnullを返すことはありませんことを示しているのですか?現在、これは私のコードです。

ライン19はCreateFunctionが、結果は何もないではないことを前提としていても、確実に証明されていないメッセージを取得します。

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

他のヒント

あなたはAssumeCreateFunctionEnsuresを変更する必要があります。その後、あなたは大丈夫でなければなりません。 Assumeがローカル静的チェッカーを支援するために、内部の仮定のためであることを覚えておいてください。彼らは他の方法からは見えません。 RequiresEnsuresだけは、クロス方式の契約である。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top