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