如果我有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
如何进行逆向处理?
答案 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<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