How can I use Convert.ChangeType to convert string into numerics with group separator?

Posted by Loic on Stack Overflow See other posts from Stack Overflow or by Loic
Published on 2010-03-08T11:04:24Z Indexed on 2010/03/08 11:06 UTC
Read the original article Hit count: 563

Filed under:
|
|

Hello,

I want to make a generic string to numeric converter, and provide it as a string extension, so I wrote the following code:

public static bool TryParse<T>( this string text, out T result, IFormatProvider formatProvider ) where T : struct
try
{
   result = (T)Convert.ChangeType( text, typeof( T ), formatProvider );
   return true;
}
catch(...

I call it like this:

int value;
var ok = "123".TryParse(out value, NumberFormatInfo.CurrentInfo)

It works fine until I want to use a group separator: As I live in France, where the thousand separator is a space and the decimal separator is a comma, the string "1 234 567,89" should be equals to 1234567.89 (in Invariant culture). But, the function crashes!

When a try to perform a non generic conversion, like double.Parse(...), I can use an overload which accepts a NumberStyles parameter. I specify NumberStyles.Number and this time it works!

So, the questions are :

  • Why the parsing does not respect my NumberFormatInfo (where the NumberGroupSeparator is well specified to a space, as I specified in my OS)
  • How could I make work the generic version with Convert.ChangeTime, as it has no overload wich accepts a NumberStyles parameter ?

© Stack Overflow or respective owner

Related posts about c#

Related posts about parsing