如何让+运算符在相互添加两个点的同时工作?
有没有办法让+
运算符为Point对象工作?
举个例子,这个小片段:
this.cm1.Show((MouseEventArgs)e.Location+this.i_rendered.Location);
你看,我试着给彼此加两点。 它只是不起作用(这是预期的)。 我很乐意让这个工作。
有任何想法吗?
它不会按照你期望的方式发生。 Point
结构为+
(加法)运算符提供的唯一重载是将Point
的坐标转换为Size
。
没有办法将两个Point
结构加在一起,我甚至不确定这意味着什么。
考虑到你不能编写超载运算符的扩展方法,也不要浪费太多时间来计算它。
幸运的是,在编译语言中,将代码分割成多行没有任何代价。 因此,您可以按如下方式重新编写代码:
Point newLocation = new Point(e.Location.X + this.i_rendered.Location.X, e.Location.Y + this.i_rendered.Location.Y); this.cm1.Show(newLocation);
或者,您可以使用Offset
方法 ,但我不相信增强可读性。
我阅读了System.Drawing.Point
的文档(在Cody Gray的答案中链接),它有一个实例方法Offset
。 该方法改变了当前的Point
(设计者选择使Point
成为一个可变的结构!)。
所以这是一个例子:
var p1 = new Point(10, 20); var p2 = new Point(6, 7); p1.Offset(p2); // will change p1 into the sum!
在同一个文档中,我也看到了从Point
到Size
的显式转换。 因此,试试这个:
var p1 = new Point(10, 20); var p2 = new Point(6, 7); Point pTotal = p1 + (Size)p2; // your solution?