2013-04-05 118 views
1

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

有很明显的不好办法,比如new RectangleF(r.Location, r.size),但肯定有.Copy.Clone方法隐藏在某处?但是这些编译对我来说都没有,似乎也没有复制构造函数。我怀疑有一些简单的,C#标准的复制任何结构的方法,我还没找到。

万一它很重要,我真正的目标是做一个方法,返回一个矩形的偏移版本(因为,令人惊讶的是,RectangleF没有这样的内置 - 它只有一个增变器方法)。在此我最好的刺是:

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

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

谢谢(谢谢@ jdv-Jan de Vaan)。我知道我必须错过一些明显的东西! “新”运算符的使用让我想到我正在处理引用,但现在我发现在C#中这不是真的。 – 2013-04-06 14:49:49

3

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

克隆它只是分配给一个新的变量。