2017-06-12 6 views
0

私はオブジェクトを返すと予想されるC#メソッドを持っています。このメソッドが例外をスローしない場合は、私は好きです。C#でnull参照型を返すのが正しいのはいつですか

私の質問は、メソッドがnullを返すようにして、それ以上の警告なしで呼び出し側にヌルチェックの責任を与えることですか?

オブジェクトは参照型であるため、オブジェクトがnullである可能性がありますか? (そして、参照型のデフォルト値はnullです: https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/keywords/null

// this method is expected to return an object 
public MyClass getObject() 
{ 
    MyClass myObject = null; 
    // Another option would be to initialize to a new instance, calling the default constructor and not setting any properties 
    // MyClass myObject = new MyClass(); // no null check needed by the caller, but it is a pretty useless object 

    try 
    { 
    // just as an example 
    myObject = new MyClass(); 
    } 
    catch (Exception e) 
    { 
    Console.WriteLine(e.Message); 
    } 
    return myObject; // will return null when and exception occured 
} 

public class MyClass 
{ 
    public int id { get; set; } 
    public string name { get; set; } 
} 
+4

のようなプロパティの値をチェックすることができます。 – Ralt

+1

ことももちろん可能で[検索メソッドの戻り値「NULL」万一またはそれは、戻り値を生成することができない場合に例外をスロー?](https://stackoverflow.com/q/175532/11683)の重複 – GSerg

答えて

0

はい、あなたが同様にあなたが現在やっていると、その場合には責任はに呼び出し側に位置しnullを返すことができます下の

は私の例を参照してください。オブジェクトのプロパティのいずれかにアクセスしようとする前に無効をチェックしてください。 C#6構文を使用する

muobject?.Age 

パターンごとにNull Object Patternを使用できます。その場合は、nullの代わりに空のオブジェクトを返します。したがって、発信者の間違いがあっても、それはNullRefExceptionで吹き飛ばされません。検証目的のために、私は限り、あなたは一貫しているとして、これまで正しいか間違った答えがあると信じて、あなたがそれをチェックする前に、値がnullであるかもしれない理由をコメントしていないif(string.IsNullOrEmpty(myobject.name)) ....

+2

彼ができるが、彼それはnullを返したり、より良い例外をスロー/ defualtオブジェクトを返すために良いことだかどうかを確認します。彼がその振る舞いを文書化し、同様の方法と一致していれば、どんなアプローチでも問題ありません。 –

関連する問題