【问题标题】:How to clone a RectangleF如何克隆一个 RectangleF
【发布时间】:2013-03-28 11:39:16
【问题描述】:

如何在 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 缺少加法运算符,这比它应该的更难看,但这是另一个问题。)有没有更简单的方法来做到这一点?

【问题讨论】:

    标签: c# copy geometry clone system.drawing


    【解决方案1】:

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

    【讨论】:

    • 谢谢(也谢谢@jdv-Jan de Vaan)。我知道我一定遗漏了一些明显的东西! “new”运算符的使用让我以为我在使用引用,但现在我发现在 C# 中这不是真的。
    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 2023-03-30
      • 1970-01-01
      • 2011-12-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-05-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多