Problema al analizar el texto de la divisa a tipo decimal

Estoy tratando de analizar una cadena como “$ 45.59” en un decimal. Por alguna razón, estoy recibiendo una excepción porque la entrada no estaba en el formato correcto. No me importan las cosas de localización porque no va a ser un progtwig global. Esto es lo que estoy haciendo. ¿Ves algún problema?

NumberFormatInfo MyNFI = new NumberFormatInfo(); MyNFI.NegativeSign = "-"; MyNFI.NumberDecimalSeparator = "."; MyNFI.NumberGroupSeparator = ","; MyNFI.CurrencySymbol = "$"; decimal d = decimal.Parse("$45.00", MyNFI); // throws exception here... 

¿Qué hay de usar:

 decimal d = decimal.Parse("$45.00", NumberStyles.Currency); 

La documentación de MSDN en Decimal.Parse declara:

“El parámetro s se interpreta con el estilo NumberStyles.Number. Esto significa que se permiten espacios en blanco y separadores de miles, pero no los símbolos de moneda. Para definir explícitamente los elementos (como símbolos de moneda, separadores de miles y espacios en blanco) que pueden ser presente en s, use el método Decimal.Parse (String, NumberStyles, IFormatProvider)

De esta manera me funciona:

 NumberFormatInfo MyNFI = new NumberFormatInfo(); MyNFI.NegativeSign = "-"; MyNFI.CurrencyDecimalSeparator = "."; MyNFI.CurrencyGroupSeparator = ","; MyNFI.CurrencySymbol = "$"; decimal d = decimal.Parse("$45.00", NumberStyles.Currency, MyNFI); 

1.) Debe definir el separador de monedas en lugar del separador de números. 2.) Debido a que usted solo definió los valores de moneda, necesita definir NumberStyles.Currency durante el análisis.