我想从字符串转换{X=-24,Y=10}
其通过产生Point.ToString();
再点吗?
我省在节能模式XML文件中的字符串值,我想读给在读模式再次指向。
我想从字符串转换{X=-24,Y=10}
其通过产生Point.ToString();
再点吗?
我省在节能模式XML文件中的字符串值,我想读给在读模式再次指向。
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]));
System.Drawing.Point
没有定义Parse
在所有的方法-你需要编写自己的,可以采取这种格式,并返回一个Point
结构。
System.Windows.Point
确实有Parse
方法可能更适合您的需求。
但是,因为你是输出到XML,应该是需要的这种非。 你应该序列化和deserializng对象图,这将自动照顾这个没有你不必担心解析和格式化。
你可以试试这个Point.Parse
Point pointResult = Point.Parse("-24,10");
我今天需要这个功能,我自己,所以我只是编码它。 这里是一个非常挑剔的解析器使用“的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)
请注意,您可能还需要删除或更改public
或static
方法的改性剂。 但我用的程序类的方法,所以我的需要是public static
。 适合自己的寿。
汉斯帕桑特有正确的解决办法:不要使用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)
看到PointConverter ConvertFrom方法。