2017-11-22 14 views
0

でインスタンス化されている私は、データクラスの多くは、このように見えるプロジェクトに取り組んでいます:C#のデータクラスのメンバーは、宣言

[DataMember] 
public List<SpecialOpeningHours> SpecialOpeningHours { get; set; } = new List<SpecialOpeningHours>(); 

私は前にこれを見たことがないと正常にちょうどこの行うだろう:

[DataMember] 
public List<SpecialOpeningHours> SpecialOpeningHours { get; set; } 

誰でもこのようにインスタンス化された理由と利点があるかどうかを説明することはできますか?それは使用に違いを生じさせないようです。私はDapperを使用していて、どちらの方法でも同じ結果が得られます。

+2

違いは、2番目のバージョンでは 'SpecialOpeningHours'が' null'です。 –

+1

"使用上の違いはありません。"後者の場合はnull以外の値で開始しますが、後者の場合はnull値で開始します。どのように違うのですか? –

+0

https://msdn.microsoft.com/magazine/dn802602.aspxをご覧ください – HimBromBeere

答えて

1

あなたの最初の例では、このためのC#6に導入されたばかりのショートカットです:

public MyClass() 
{ 
    this.SpecialOpeningHours = new List<SpecialOpeningHours>(); 
} 

今とこれを比較します

public MyClass() 
{ 
    this.SpecialOpeningHours = null; 
} 

前者はあなたの最初のオプションをコンパイルするときに翻訳されたものです2番目は、初期値を追加しないときに得られるものです。特に、2番目の例では、メンバーのいずれかを呼び出すとすぐにNullReferenceExceptionが発生し、最初のメンバーが正常に動作します。

+0

ありがとう、今のところ意味があります。デフォルトで空のリストを持つことは有益かもしれませんが、それはデータベースがデータを返さなかったことを意味します。私はisが人口に入るまでそれをヌルにしたいと思う。 –

+0

空リストへのデフォルト設定はリストにのみ適用されます。代わりに 'IEnuemrable 'を持っていればどうでしょうか。コンパイラは、プロパティがデフォルトにするべきものをどのように知るべきですか?もちろん、この値を設定する必要があります。さらに、空のリストは、いくつかの異なることを示すかもしれません:それはDBからのデータではありませんが、*持っていません。リストがまだ満たされておらず、値がすぐに来るということもあります。 – HimBromBeere

+0

古いEntity Frameworkプロジェクトを調べました。モデルがEFによって生成される場所では、メンバーは新しい空のリストとしてもインスタンス化されません。私はそれらをインスタンス化することの利点を見ることができ、それを使用することを検討します。 –