2015-12-27 8 views
7
public List<string> MembershipIds 
{ 
    get; 
    set; 
} = new List<string>(); 

にC#6.0のデフォルトpropertyvaluesを変換し、私は無効なトークンは、C#5.0

"=" クラスでは、構造体またはインターフェイスメンバー宣言を得ました。

これはC#6の機能です。それをC#5に変換するには?

答えて

13

簡単な方法はありませんオートプロパティをそのまま残しておきます。あなたは自動プロパティを必要とした場合は

private List<string> membershipIds = new List<string>(); 
public List<string> MembershipIds { 
    get { return membershipIds; } 
    set { membershipIds = value; } 
} 

は、あなたが割り当てを行う必要があります。あなたは自動プロパティを必要としない場合は

は、プライベート変数と非自動プロパティを使用してコードを変換します

public List<string> MembershipIds { get;set; } 
... 
// This constructor will do the assignment. 
// If you do not plan to publish no-argument constructor, 
// it's OK to make it private. 
public MyClass() { 
    MembershipIds = new List<string>(); 
} 
// All other constructors will call the no-arg constructor 
public MyClass(int arg) : this() {// Call the no-arg constructor 
    .. // do other things 
} 
public MyClass(string arg) : this() {// Call the no-arg constructor 
    .. // do other things 
} 
+1

アップウィジェットは、「自動プロパティが必要なのはなぜですか? –

+0

'this()'の連鎖には構文的な修正が必要です。 –

+0

@JeppeStigNielsenありがとう、私は今朝Javaモードに切り替えました!私は、オートプロパティが必要な唯一のケースは、その使用を必要とする企業全体のコーディング標準がある場合です。私は、変数+ get/setペアでの使用を要求する技術的理由を考えることはできません。 – dasblinkenlight

4

この機能は、プロパティとそれがコンストラクタごclass割り当て一部を挿入されないためデフォルト値と呼ばれています。

次にコードを変更すると、あなたのコンストラクタのすべてを変更する必要がなく、そのプロパティのバッキングフィールドに同じことを行い、それがC#5.0でサポートされています。

private List<string> mMembershipIds = new List<string>(); 

public List<string> MembershipIds 
{ 
    get 
    { 
     return mMembershipIds; 
    } 
    set 
    { 
     mMembershipIds = value; 
    } 
} 
関連する問題