如何在 C# 中将字符串中的值转换为 System.Windows.Point?

How to convert values in string into System.Windows.Point in C#?

我正在使用 C#,我有一个字符串,其值类似于 strResult = "(30,40),(189,339),(30,40),(60,30)"。我想将这些值转换为 System.Windows.Point 。 因此 point[0].x = 30 的第一个值,point[0].y = 40 等等。

{
 string[] numbers = System.Text.RegularExpressions.Regex.Split(strResult, @"[(),]+");
  for (int i = 0; i < numbers; i++)
  { 
   System.Windows.Point point = // do something
   drawingContext.DrawEllipse(Brushes.Green, null, new System.Windows.Point(point.X, point.Y), 3, 3);
  }

有人可以帮忙吗?提前致谢:)

可以使用 Convert.ToInt32Int32.Parse(或许多其他选项)将字符串解析为整数。

小心你的正则表达式。该特定代码将 return 数组的第一个和最后一个元素为空:"", "30", "40", ..., "60", "30", "" .

您可以在每次迭代中为单个点解析 2 个元素。我处理了第一个和最后一个空元素,但最好正确重写正则表达式:

    for (int i = 1; i < numbers.Length - 1; i += 2)
    {       
       System.Windows.Point point = new System.Windows.Point(Convert.ToInt32(numbers[i]), Convert.ToInt32(numbers[i + 1])); 
       drawingContext.DrawEllipse(Brushes.Green, null, new System.Windows.Point(point.X, point.Y), 3, 3);
    }

下面是一个更适合您的场景的正则表达式:\((.*?)\)

这将为您提供所有点的数组 x, y。现在您只需将字符串拆分为 , 和 trim 结果。最后,遍历点数组并使用解析的 int 值创建一个新点。

    var pointString = "(30,40),(189,339),(30,40),(60,30)";
    var ps = Regex.Split(pointString, @"\((.*?)\)");
    foreach (var p in ps) {
        if (!string.IsNullOrEmpty(p)) {
            var px = p.Split(',');
            var x = int.Parse(px[0].Trim());
            var y = int.Parse(px[1].Trim());
            var point = new Point(x, y);
            Console.WriteLine(point);
        }
    }