« Printing from .NET 3.5 in Windows 7 | Main | WebException: "The message length limit was exceeded" »

02 January 2012

Avoid System.Windows.Rect.ToString()

System.Windows.Rect.ToString() is documented as returning a string in “the following form: "X,Y,Width,Height"”.

It seems like this method is the complement to the Parse method, which accepts the “string representation of the rectangle, in the form "x, y, width, height"”.

Unfortunately, while Parse is culture-invariant (as documented), ToString follows the .NET convention of returning locale-sensitive results; you need to call the ToString(IFormatProvider) overload to produce a string in the "x,y,width,height" format (that can be accepted by Parse).

Rect rect = new Rect(1.5, 2, 3.5, 4);
    string s;

    s = rect.ToString(); // "1.5,2,3.5,4"
    Rect.Parse(s); // success

    Thread.CurrentThread.CurrentCulture = new CultureInfo("de"); // or "es", "fr", etc.

    s = rect.ToString(); // "1,5;2;3,5;4"
    Rect.Parse(s); // throws FormatException

    s = rect.ToString(CultureInfo.InvariantCulture);
    Rect.Parse(s); // success

I filed a bug report, even though this is arguably an error in the documentation, not in the .NET Framework itself.

Posted by Bradley Grainger at January 02, 2012 12:03 PM