4

我想再次将{X=-24,Y=10}生成的字符串转换Point.ToString();为Point?

我在保存模式下将字符串值保存在 xml 文件中,我想在读取模式下再次读取它。

4

7 回答 7

4
var myStringWhichCantBeChanged="{X=-24,Y=10}";
var g=Regex.Replace(myStringWhichCantBeChanged,@"[\{\}a-zA-Z=]", "").Split(',');

Point pointResult = new Point(
                  int.Parse (g[0]),
                  int.Parse( g[1]));
于 2012-04-28T19:11:19.647 回答
2

System.Drawing.Point根本没有定义Parse方法——您需要编写自己的方法来采用这种格式并返回一个Point结构。

System.Windows.Point确实有Parse方法,可能更适合您的需求。

但是,由于您要输出到 XML,因此不需要这些。您应该序列化和反序列化对象图,它会自动处理此问题,而无需担心解析和格式化。

于 2012-04-28T19:09:25.903 回答
1

你可以试试这个Point.Parse

Point pointResult = Point.Parse("-24,10");
于 2012-04-28T19:09:56.540 回答
1

Hans Passant 有正确的解决方案:不要使用Point.ToString(),它会给你一个疯狂的、不可重用的字符串(MSDN 称之为“人类可读的”)。改用PointConverter类。

要生成字符串:

Dim myPoint As New Point(0, 0)
Dim pointConverter As System.ComponentModel.TypeConverter = _
    System.ComponentModel.TypeDescriptor.GetConverter(GetType(Point))
Dim pointAsString As String = pointConverter.ConvertToString(myPoint)

并解释上面的字符串:

Dim pointConverter As System.ComponentModel.TypeConverter = _
    System.ComponentModel.TypeDescriptor.GetConverter(GetType(Point))
Dim myNewPoint As New Point = pointConverter.ConvertFromString(pointAsString)
于 2013-10-30T20:10:44.803 回答
1

我自己今天需要这个功能,所以我只是编写了代码。这是一个非常挑剔的解析器,使用“TryParse”方法。我不喜欢我所说的“懒惰”解析,其中“blah4,9anything”会被解析为一个点。而且我不喜欢抛出错误。数据类型的“TryParse”方法对我来说非常健壮。所以这是我的实现供任何人使用。我唯一的要求是,如果您发现错误,请告诉我!:)

public static bool TryParsePoint(string s, out System.Drawing.Point p)
{   p = new System.Drawing.Point();
    string s1 = "{X=";
    string s2 = ",Y=";
    string s3 = "}";
    int x1 = s.IndexOf(s1, StringComparison.OrdinalIgnoreCase);
    int x2 = s.IndexOf(s2, StringComparison.OrdinalIgnoreCase);
    int x3 = s.IndexOf(s3, StringComparison.OrdinalIgnoreCase);
    if (x1 < 0 || x1 >= x2 || x2 >= x3) { return false; }
    s1 = s.Substring(x1 + s1.Length, x2 - x1 - s1.Length);
    s2 = s.Substring(x2 + s2.Length, x3 - x2 - s2.Length); int i = 0;
    if (Int32.TryParse(s1, out i) == false) { return false; } p.X = i;
    if (Int32.TryParse(s2, out i) == false) { return false; } p.Y = i;
    return true;
} // public static bool TryParsePoint(string s, out System.Drawing.Point p)

请注意,您可能还想删除或更改方法的publicorstatic修饰符。但是我在 Program 类中使用了该方法,所以我的需要是public static. 适合自己。

于 2014-09-09T20:01:13.657 回答
0

请参阅PointConverter ConvertFrom 方法。

于 2016-12-16T08:02:46.833 回答
0

试试这个,它是我在我的项目中使用的。

string str = "-24,10";
Point pt = new Point(Int32.Parse(str.Split(',')[0]), Int32.Parse(str.Split(',')[1]));
于 2020-11-28T11:03:47.973 回答