2012-02-16 6 views
1

Contract.Resultよりも迷惑ですが、状況によってはその型を解決できません。以下のマニュアルの抜粋を参照してください。C#Contract.Result型とNULLを比較すると

メソッドの戻り値は、メソッドの戻り値は、Tは、メソッドの戻り型に置き換えられ発現Contract.Result<T>()を介して参照することができる事後条件内値。コンパイラが型を推論できないときは、明示的に与えなければなりません。 たとえば、C#コンパイラは引数を取らないメソッドの型を推論することができません。

私は、コードスニペットcenは文字列でContract.Ensures(Contract.Result<String>() != null);が編集のために強調表示作り出すことに気づきました。

は、私が何かをしないのですか、私はnullに比較するときにオブジェクトにタイプを設定することができます。 すなわちContract.Ensures(Contract.Result<Object>() != null);

+4

あなたは少なくともあなたの質問に説明的なタイトルをつけてもらえますか? – Bart

答えて

1

私はOO理論に基づいていると考えているだろう。ヌル可能な型があればそれ。次に、nullはすべての(NULL可能な)タイプに準拠します。したがって、それは動作するはずですので、私は以下のテストを書いた。

using NUnit.Framework; 
using System.Diagnostics.Contracts; 

namespace Tests 
{ 
    [TestFixture] 
    class EnsureResult_nunit 
    { 
     [Test] 
     public void testA() 
     { 
      var z = str1(); 
      var y = str2(); 
     } 

     [Test, ExpectedException] 
     public void testB() 
     { 
      var z = str3(); 
     } 

     [Test, ExpectedException] 
     public void testC() 
     { 
      var y = str4(); 
     } 


     public string str1() 
     { 
      Contract.Ensures(Contract.Result<Object>() != null); 
      return ""; 
     } 

     public string str2() 
     { 
      Contract.Ensures(Contract.Result<Object>() == null); 
      return null; 
     } 

     public string str3() 
     { 
      Contract.Ensures(Contract.Result<Object>() == null); 
      return ""; 
     } 

     public string str4() 
     { 
      Contract.Ensures(Contract.Result<Object>() == null); 
      return ""; 
     } 
    } 
} 

すべてのテストに合格しました。

関連する問題