{X=-24,Y=10}
によって生成された文字列からPoint.ToString();
再びPointに変換したいですか?
文字列値を保存モードでxmlファイルに保存し、読み取りモードで再度ポイントするように読み取ります。
{X=-24,Y=10}
によって生成された文字列からPoint.ToString();
再びPointに変換したいですか?
文字列値を保存モードで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 に出力しているので、これは不要です。オブジェクト グラフをシリアライズおよびデシリアライズする必要があります。これにより、解析やフォーマットについて心配する必要なく、これが自動的に処理されます。
Point pointResult = Point.Parse("-24,10");
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)
今日はこの機能が必要だったので、コーディングしました。これは、「TryParse」アプローチを使用した、非常にうるさいパーサーです。私は、「何でもかんでも」がポイントとして解析される「怠惰な」解析と呼んでいるものは好きではありません。そして、私はエラーを投げるのが好きではありません。データ型の「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
修飾子を削除または変更することもできます。しかし、私は Program クラスでそのメソッドを使用したので、私はpublic static
. 自分に合わせてください。
PointConverter ConvertFrom メソッドを参照してください。