如何克隆一个矩形

本文关键字:一个 何克隆 | 更新日期: 2023-09-27 18:07:33

如何在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的加法运算符的惊人缺乏使它比它应该丑陋,但这是另一个问题。)有更简单的方法吗?

如何克隆一个矩形

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的副本

Rect是一个结构体,一个值类型。

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