2010-12-01 11 views
7

背景: この開発者の原則は、「私の関数がnullを返すべきか、要求された項目が存在しない場合に例外をスローするか」です。私はここで議論したくないです。私は値を返さなければならないすべてのケースに対して例外をスローすることにしました。この値は(プログラム上または論理上)無効なリクエストの場合にのみ存在しません。C#:関数がnullを返すことはないと宣言しますか?

そして最後に、私の質問:コンパイラはnullを返していないと、戻り値がnullであるかどうかを確認する誰に警告決してことを知っているように、 は私が機能をマークすることはできますか?

+0

可能な重複http://stackoverflow.com/questions/484571/how-can-i-show-その方法では決して返されないヌルデザインによる契約による) –

+0

他:http://stackoverflow.com/questions/792531/c-how-to-implement-and-use -a-notnull-and-canbenull-attribute –

+0

私は見ていましたが、私はそれらを見ませんでした(明らかに十分に難しくない) – MatthiasG

答えて

7

Code Contractsを使用してこれを行うことができます。

例:

public String Method1() 
    { 
     Contract.Ensures(Contract.Result<String>() != null); 

     // To do 
    } 
+0

ありがとう、それは私が探しているようです。 .NETのすぐれたソリューションはより良いはずでしたが、これは通常のやり方(コード契約のアドバイスの数を見てみる)のようです。 – MatthiasG

+1

少なくとも.NET 4のボックス外です。 –

+2

これは、.NETのすぐ使えるソリューションです。これは公式に.Net 4.0の一部です。 – decyclone

0

値の型を返すと、システムの 'nullable'ラッパーを使用して明示的に指定しない限り、nullにすることはできません。

2

あなたはメソッドがnullを返さない契約を定義することができ、コードコントラクトを使用してCode Contracts

3

を探しています。

using System.Diagnostics.Contracts; // required namespace 

public T MethodName() 
{ 
    Contract.Ensures(Contract.Result<T>() != null); //where T is the return type. 

    // method body... 
} 
[C#で、私はメソッドがnullを返すことはありませんことを示すことができる方法(契約による設計)](の
関連する問題