您如何轻松地在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的副本。

07-27 22:26