请问关于c的具体应用场景有哪些?

2026-04-29 01:472阅读0评论SEO教程
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计602个文字,预计阅读时间需要3分钟。

请问关于c的具体应用场景有哪些?

我有一种用折线对象动态制作图形的方法。它生成一些有趣的物品,但我只想保留最后10个坐标。一旦我们达到第10个位置,每个坐标将向左移动X个像素,新值将添加到最右边。在我的绘图类的Add函数中。

我有一个用折线对象动态制作的图形.它产生一些有趣的东西,但我想只保留最后10个坐标,一旦我们到达第10个位置,每个坐标将向左移动X个像素,新值将在最后添加.

在我的绘图类的Add函数中,我尝试了这种代码:

if (points.Count > 10) { myPolyline.Points.RemoveAt(0); foreach(Point p in myPolyline.Points) { p.X = p.X - 50;//Move all coord back to have a place for the new one } }

这不起作用,因为我们无法在ForEach循环中修改集合的变量.在WPF / C#中执行此操作的最佳方法是什么?

更多信息

我可以这样做:

请问关于c的具体应用场景有哪些?

for (int i = 0; i < this.myPolyline.Points.Count; i++) { this.myPolyline.Points[i] = new Point(this.myPolyline.Points[i].X - 50, this.myPolyline.Points[i].Y); }

但是我想要一种更简洁的方法来做到这一点,而不必非常时间创建点对象.

好吧,Point是一个结构,所以创建新结构的开销应该不错.做以下……

Point p = this.myPolyline.Points[i]; p.X -= 50; this.myPolyline.Points[i] = p;

……真的没有什么不同,只是因为结构是按价值传递的.

考虑到这种情况,你几乎坚持使用for循环并重新分配给myPolyline.Points [i]:

>您必须使用不同的X值修改Point.
>您无法修改foreach循环的变量,因此必须使用for循环.
> myPolyline.Points [i] .X – = 50将无法工作,因为Point结构从数组中检索,然后不会自动重新分配.

如果您只是想移动整个PolyLine,我可能会建议使用LayoutTransform或RenderTransform,但是您要移动一部分Points然后添加其他部分.

编辑:如果你真的想重构那个操作,你可以在PointCollection上为for循环和点调整创建一个扩展方法,如下所示:

static public void ChangePoints( this PointCollection pc, Vector v ) { for (int i = 0; i < pc.Count; i++ ) { pc[i] += v; // the above works on the indexer because you're doing an operation on the // Point rather than on one of the Point's members. } }

用法:

myPolyline.Points.ChangePoints( new Vector( -50, 0 ) );

您仍然需要以相同的方式更改Points,但它会在其他地方重构,以便使用更具可读性. Vector的使用也使它更具可读性.

本文共计602个文字,预计阅读时间需要3分钟。

请问关于c的具体应用场景有哪些?

我有一种用折线对象动态制作图形的方法。它生成一些有趣的物品,但我只想保留最后10个坐标。一旦我们达到第10个位置,每个坐标将向左移动X个像素,新值将添加到最右边。在我的绘图类的Add函数中。

我有一个用折线对象动态制作的图形.它产生一些有趣的东西,但我想只保留最后10个坐标,一旦我们到达第10个位置,每个坐标将向左移动X个像素,新值将在最后添加.

在我的绘图类的Add函数中,我尝试了这种代码:

if (points.Count > 10) { myPolyline.Points.RemoveAt(0); foreach(Point p in myPolyline.Points) { p.X = p.X - 50;//Move all coord back to have a place for the new one } }

这不起作用,因为我们无法在ForEach循环中修改集合的变量.在WPF / C#中执行此操作的最佳方法是什么?

更多信息

我可以这样做:

请问关于c的具体应用场景有哪些?

for (int i = 0; i < this.myPolyline.Points.Count; i++) { this.myPolyline.Points[i] = new Point(this.myPolyline.Points[i].X - 50, this.myPolyline.Points[i].Y); }

但是我想要一种更简洁的方法来做到这一点,而不必非常时间创建点对象.

好吧,Point是一个结构,所以创建新结构的开销应该不错.做以下……

Point p = this.myPolyline.Points[i]; p.X -= 50; this.myPolyline.Points[i] = p;

……真的没有什么不同,只是因为结构是按价值传递的.

考虑到这种情况,你几乎坚持使用for循环并重新分配给myPolyline.Points [i]:

>您必须使用不同的X值修改Point.
>您无法修改foreach循环的变量,因此必须使用for循环.
> myPolyline.Points [i] .X – = 50将无法工作,因为Point结构从数组中检索,然后不会自动重新分配.

如果您只是想移动整个PolyLine,我可能会建议使用LayoutTransform或RenderTransform,但是您要移动一部分Points然后添加其他部分.

编辑:如果你真的想重构那个操作,你可以在PointCollection上为for循环和点调整创建一个扩展方法,如下所示:

static public void ChangePoints( this PointCollection pc, Vector v ) { for (int i = 0; i < pc.Count; i++ ) { pc[i] += v; // the above works on the indexer because you're doing an operation on the // Point rather than on one of the Point's members. } }

用法:

myPolyline.Points.ChangePoints( new Vector( -50, 0 ) );

您仍然需要以相同的方式更改Points,但它会在其他地方重构,以便使用更具可读性. Vector的使用也使它更具可读性.