2013-07-19 6 views
7

C#のassignment operatorは、割り当てられた値を返します。 この機能がどこに役立つかは明確ではありません。このような奇妙な構文でそれを使用してあなたのコードの行を保存することができますが、readbilityに何か良いを行うことはありません。代入演算子がC#で代入された値を返すのはなぜですか?

private String value; 
    public void SetAndPrintValue(String value) 
     PrintValue(this.value = value); 
    } 
    private static void PrintValue(String value) { 
     /* blah */ 
    } 

、その目的は何ですか?

+1

これは単なるC#の構文品質ではありません。 if文を使用すると便利な場合があり、同時に割り当てることができます。しかし、より難読化されたコードを作成するので、あまり使用することはありません。要約:代入は文ではなく式です。 –

+5

もう一つの良い例は '_myInstance ??と同様に遅延インスタンス化です。 (_myInstance = new MyObject()) ' – McGarnagle

+5

btn1.Visible = btn2.Visible = false; – EricLaw

答えて

12

Chained assignmentは、多くの言語がC言語に戻ってくる(おそらくそれ以前の)言語です。 C#はそのような言語の一般的な機能であり、の場合のように—のように使用できます。

var node = leaf; 
while(null != node = node.parent) 
    node.DoStuff(); 

これは、いくつかのコードもう少しコンパクトになるかもしれない、またはあなたには、いくつかの巧妙なトリックを行うことができますが、それ:

int a, b, c; 
for(a = b = c = 100; a <= b; c--) 
{ 
    // some weird for-loop here 
} 

またはこの:

時折、次のようなコードが表示されることがあります確かにそれをより読みやすくするものではありません。私はほとんどの場合、それに対して反対することをお勧めします。

+2

私は非常に一般的な使い方をしていますが、多くのIOクラスで読み込み操作の結果をチェックするときにいつでも使用します。while((currentLine = streamReader.ReadLine())!= null){...} ' –

+0

@ScottChamberlainええ、これも良い例です。 –

4

私は、一般的に同じプロパティをコントロールに割り当てるために使用します。

btnSubmit.Enabled = btnAdd.Enabled = btnCancel.Enabled = txtID.Enabled= false; 
関連する問題