1

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

显然有一些不优雅的方法可以做到这一点,例如new RectangleF(r.Location, r.size),但肯定有.Copyor.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,但这是另一个问题。)有没有更简单的方法来做到这一点?

4

2 回答 2

5

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

于 2013-04-05T22:14:22.613 回答
3

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

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

于 2013-04-05T22:14:02.910 回答