如何克隆RectangleF

时间:2013-04-05 22:04:10

标签: c# copy geometry clone system.drawing

如何在C#中轻松克隆(复制)RectangleF

显然有一些不太优雅的方法,例如new RectangleF(r.Location, r.size),但肯定有隐藏在某个地方的.Copy.Clone方法?但这些都不能为我编译,也不会有复制构造函数。我怀疑有一些简单的C#标准方法可以复制任何结构,我还没有找到它。

如果它很重要,我的真正目标是创建一个返回矩形的偏移版本的方法(因为,令人惊讶的是,RectangleF没有这样的内置 - 它只有一个mutator方法)。我最好的努力是:

public static RectangleF Offset(RectangleF r, PointF offset) {
    PointF oldLoc = r.Location;
    return new RectangleF(new PointF(oldLoc.X+offset.X, oldLoc.Y+offset.Y), r.Size);
}

(比PointF令人惊讶的缺乏加法运算符更糟糕,但这是另一个问题。)有没有更简单的方法来做到这一点?

2 个答案:

答案 0 :(得分:4)

RectangleF是一个结构,即值类型。请考虑以下事项:

public class Program
{
    struct S
    {
        public int i;
    }

    static void Main(string[] args)
    {
        S s1 = new S();
        S s2 = s1;

        s1.i = 5;

        Console.WriteLine(s1.i);
        Console.WriteLine(s2.i);
    }
}

输出结果为:

5
0

因为S是结构,即s2是s1的副本。

答案 1 :(得分:3)

Rect是结构,值类型。

要克隆它,只需将其分配给一个新变量。