1

如果我有PointCollection

var points = new PointCollection();
points.Add(new Point(0, 0));
points.Add(new Point(10, 10));
points.Add(new Point(20, 20));
points.Add(new Point(30, 30));

我可以string使用以下方法获得等价物:

string str = points.ToString();

现在str是:

0,0 10,10 20,20 30,30

我怎样才能得到相反的过程?

4

6 回答 6

5

像这样的东西?

var points = str.Split(' ').Select(x => 
{
    var c = x.Split(';');
    return new Point(int.Parse(c[0]), int.Parse(c[1]));
}).ToList();
于 2012-06-22T15:28:37.820 回答
3

只需使用PointCollection.Parse方法

PointCollection points = PointCollection.Parse(str);
于 2012-06-22T15:54:56.127 回答
2

“现在 str 是:

0;0 10;10 20;20 30;30

“_不,System.Collections.Generic.List1[System.Drawing.Point]相反。

如果要将点输出为String,用分号分隔 X/Y 值和用分号分隔的点,您必须自己做。

例如:

String forward = string.Join(" ", points.Select(p => p.X + ";" + p.Y));
points.Reverse();  // reverse the order of the list
String backward = string.Join(" ", points.Select(p => p.X + ";" + p.Y));

List(Of T).Reverse方法

编辑:所以实际上您使用的不是List<Point>WPF 而是 WPF PointCollection。我既没有经验也无法测试它。但既然它实现了IEnumerable<Point>你应该能够做到:

String backward = string.Join(" ", points.Reverse().Select(p => p.X + ";" + p.Y)); 
于 2012-06-22T15:34:13.980 回答
1

试试这个:

 string strpoints = "0;0 10;10 20;20 30;30";
            var strpointarray = strpoints.Split(' ');
            var points = new List<Point>();
            foreach (var item in strpointarray)
            {
                var newitem= item.Split(';');
                points.Add(new Point(int.Parse(newitem[0]),int.Parse(newitem[1])));
            }
于 2012-06-22T15:34:21.307 回答
0

编写一个函数toPoint,它接受两个参数并将它们转换为数字,将其传递给 new Point 并返回...

这是一些内置字符串的链接-> 数字方法http://msdn.microsoft.com/en-us/library/bb397679.aspx

于 2012-06-22T15:26:53.820 回答
0

另一种方法是定义转换运算符。在转换运算符中,您需要编写提供的代码“ie”。以下是转换运算符的链接(显式和隐式) http://msdn.microsoft.com/en-US/library/z5z9kes2%28v=vs.80%29 http://msdn.microsoft.com/en-US/库/xhbhezf4%28v=vs.80%29

于 2012-06-22T16:22:54.840 回答