0

Point.Parse("SomeText");

我如何检查给定的字符串是否代表一个点?

解析方法文档在这里

4

2 回答 2

2

实现这一目标的最快且可能最干净的方法是实现您自己的TryParse方法Point.Parse

    public bool TryParse(string source, out Point point)
    {
        try
        {
            point = Point.Parse(source);
        }
        catch (FormatException ex)
        {
            point = default(Point);
            return false;
        }

        return true;
    }

然后你可以像这样消费:

        Point point;
        if (!TryParse("12, 13", out point))
        {
            // We have an invalid Point!
        }

如果您的字符串不是有效点,该方法将返回 false,您可以立即执行任何需要完成的操作。如果解析成功,该out参数将包含已解析Point的值,否则将包含 的默认值Point,可能为 (0, 0)。

请注意,这里的异常被抑制了,但这不应该给你带来任何麻烦。如果需要,您可以在设置后重新抛出它point

于 2014-03-25T11:12:20.397 回答
1

Point.Parse()如果你真的阅读了文档,你会看到在三种情况下会抛出异常:

  • source 不是由两个逗号或空格分隔的双精度值组成。
  • source 不包含两个数字。
  • 源包含太多分隔符。

因此,您必须:

  • 确保您的输入代表一个点,并且您不会将虚假信息传递给该方法。我们不知道您的输入来自哪里,所以这取决于您。
  • 验证您的输入,例如使用正则表达式。这可能会损害性能而不是不验证,但这取决于输入以及输入实际上不代表点的频率。
  • 自己解析每个字符串,例如使用string.IndexOf()and string.Substring()(or RegEx.Match()) and double.TryParse(),但是你基本上是在重建Point.Parse()并且可以更好地返回 a new Point { X = parsedX, Y = parsedY }
于 2014-03-25T11:03:20.610 回答