如何在Dart中复制矩形

时间:2019-05-01 09:15:29

标签: dart

我有两个矩形,其中一个偶尔会重置为其他矩形。在C ++中,我会这样做:

_rect = _resetRect;

但是在Dart中,这实际上意味着_rect现在与_resetRect指向同一对象,这不是我想要的。

我当前的解决方案是:

_rect.left = _resetRect.left;
_rect.width = _resetRect.width;
_rect.top = _resetRect.top;
_rect.height = _resetRect.height;

这是愚蠢的。 Other questions建议没有复制对象的内置方法(就像C ++中那样),并且您必须依靠提供clone()方法的对象。但是Rectangle没有人,该怎么办?

即使它确实具有clone()方法,也不会分配一个全新的Rectangle而不是仅仅设置现有字段的字段(例如C ++的operator=),因此效率较低?

1 个答案:

答案 0 :(得分:0)

C ++也无法深度复制包含指向其他对象的指针/引用的对象。在Dart中,所有值都是引用,因此限制适用于所有对象。

我认为这是一个MutableRectangle,因为Rectange中的dart:math是不可修改的。 该类确实无法克隆另一个矩形的值,因此您必须复制每个矩形。我会为此使用级联:

_rect
  ..left = _resetRect.left
  ..top = _resetRect.top
  ..width = _resetRect.width
  ..height = _resetRect.height;

或者,如果它发生得足够频繁,则可以创建一个辅助函数:

void copyRectangle(MutableRectangle target, Rectangle source) {
   target
     ..left = source.left
     ..top = source.top
     ..width = source.width
     ..height = source.height;
}