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() 导致对同一对象的两个引用。

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

产生两个新对象。因此,如果两个对象引用是您真正想要的,则使用它是合法的。除此之外,这是偏好。

我看不出两者之间有其他区别。

4

1 回答 1

0

在某些情况下,多次分配肯定是不合适的。例如,永远不应执行以下操作:

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

在某些情况下,多重赋值提供了更好的可读性 - 特别是,当您在进入可能会或可能不会让它们“指向”同一个对象的算法之前将相同的对象实例分配给两个变量时:

// 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());

在这种情况下,Compute()to的分配res也会改变cached,除非cached开始时是非空的。

于 2013-07-30T19:00:28.873 回答