1

私は時々これを見ます:

int a = 1;
int b = 2;

a = b = 3;  //assign 3 to a and b.

それは良い考えではないと思いますが、私はそれが行われているのを見ています。と記載した方が良さそうです。

a = 3;
b = 3;

このようにして、これが起こっていることであることが後の読者には明らかです。

このような割り当ては避けるべきですか、またはそのような割り当てが好まれる状況はありますか?

編集 コメントと回答を確認した後、より正確な質問は次のとおりだと思います: IntA = IntB = 3 は複数の行に分割することと同じですか?

プリミティブ型の場合、答えはイエスです。同じです。なので、使うか使わないかは好みです。

参照型の場合、答えはノーです。同じではありません。

ref = ref = new Ref() は、同じオブジェクトへの 2 つの参照になります。

ref = new Ref();
ref = new Ref();

2 つの新しいオブジェクトが作成されます。したがって、2 つのオブジェクト参照が本当に意図したものである場合は、使用しても問題ありません。それ以上は好みです。

2つの間に他の違いはありません。

4

1 に答える 1

0

複数の割り当てが明らかに不適切な場合があります。たとえば、次のことは絶対に行ってはなりません。

decimal speed;
decimal distance;
speed = distance = 0M; // <<== This compiles, but it is very, very wrong.

複数の代入を使用すると読みやすくなる場合があります。具体的には、同じオブジェクト インスタンスを 2 つの変数に代入してから、同じオブジェクトを「指す」ままにする場合とそうでない場合があるアルゴリズムに入る場合です。

// You can do this
MyClass smallest;
MyClass largest;
smallest = new MyClass();
largest = smallest;
// However, this conveys the idea slightly better:
MyClass smallest;
MyClass largest;
smallest = largest = new MyClass();

技術的には同じではありませんが、複数の代入によって読みやすさが向上する関連する状況は、結果をキャッシュする場合です。

MyClass res = cached ?? (cached = Compute());

この場合、最初から が nullでない限り、 Compute()toの割り当てresも変更されます。cachedcached

于 2013-07-30T19:00:28.873 に答える