何时在单个作业中使用多个目的地是否合适?

时间:2013-07-30 18:38:41

标签: c# variable-assignment

我偶尔会看到这个:

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

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

我发现两者之间没有其他区别。

1 个答案:

答案 0 :(得分: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()res的分配也会更改cached,除非cached开头为非空。