我怎样才能检查字符串变量是否代表点结构?

时间:2014-03-25 10:44:00

标签: c# point formatexception

Point.Parse("SomeText");

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

解析方法文档为Here

2 个答案:

答案 0 :(得分: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后重新抛出它。

答案 1 :(得分:1)

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

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

所以你必须要么:

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