2017-12-11 2 views
-2

setメソッドで複数の値を設定することはできますか? setあなたの代わりに{..}を使用することができた後=>のための必要はありませんプロパティの表現式セットメソッド内の複数の値

public int ID { get; set => {Property = value, ID=value}; } 
+1

もちろん、それはできますが、少なくとも適切に文書化するべきではありません。副作用は基本的には悪いことです。実際には、プロパティは通常の取得メソッドと設定メソッドです。あなたは、通常の方法でもできる*すべてのことをすることが許されています。 – HimBromBeere

+2

はい、できます。それを試しましたか?何が起こった? [ask]を読んでください。 – CodeCaster

+0

は構文エラーを示します。私はそれが推奨されていないか、または良いプログラムスタイリング(それが可能かどうか疑問に思っていた)を知っています – Wouter

答えて

1

Expression-bodied setters複数の操作を実行する表現力がないため、

private Foo foo; 
public Foo Foo 
{ 
    get { return foo; } 
    set 
    { 
     foo = value; 
     OtherProperty = value.SomethingElse; 
    } 
} 

いくつかの操作は非常に性質上の副作用があるため、これを行うのが妥当な場合もあります。たとえば、オブジェクトのタイムゾーンプロパティを設定する場合は、基底のDateTimeを変更して、DateTimeKindDateTimeKind.Localであることを確認してください。そうしないと、オブジェクトのDateTimeプロパティが不完全または間違っています。

つまり、あなたはどこでもこの作業を行っていると思われますが、過剰使用はコードの匂いなので、デザインを再考することができます。

0

は、私は次のような何かをしたいです。それは意志 、読み取り専用のプロパティあなたは、その値を設定することはできませんが、ここで

class Sample 
{ 
    private int _Property; 
    private int _ID; 
    public int Property 
    { 
     get { return _Property; }   
    } 
    public int ID 
    { 
     get { return _ID; } 
     set 
     { 
      _ID = value; 
      _Property = value; 
     } 
    } 
} 

が作業を示し Exampleある

ここ

Property:私はあなたがこのようなクラスを探していると思いますIDの値を設定すると自動的に割り当てられます

+3

誰もそのようなクラスを探している必要があります。 'foo.Poperty = 1; foo.ID = 2; 'そして今は' foo.Property'が2です。頭痛のレシピ。 – oerkelens

+0

@oerkelens:ポイントのおかげで、 'Property'は読み込み専用でなければならない、私は答えを更新した –

関連する問題