指向PointCollection的字符串

时间:2012-06-22 15:23:59

标签: c# string list point

如果我有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

如何进行逆向处理?

6 个答案:

答案 0 :(得分:5)

这样的东西?

var points = str.Split(' ').Select(x => 
{
    var c = x.Split(';');
    return new Point(int.Parse(c[0]), int.Parse(c[1]));
}).ToList();

答案 1 :(得分: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 Method

修改:实际上,您实际上并未使用List<Point>而是使用WPF PointCollection。我既没有经验也无法测试。但是,由于它实现了IEnumerable<Point>,你应该能够做到:

String backward = string.Join(" ", points.Reverse().Select(p => p.X + ";" + p.Y)); 

答案 2 :(得分:2)

只需使用PointCollection.Parse method

PointCollection points = PointCollection.Parse(str);

答案 3 :(得分: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])));
            }

答案 4 :(得分:0)

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

以下是一些内置字符串的链接 - &gt;数字方法http://msdn.microsoft.com/en-us/library/bb397679.aspx

答案 5 :(得分:0)

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