NumberFormatInfo nfi = new NumberFormatInfo();
nfi.CurrencySymbol = "$";

var result1 = decimal.Parse("$123456", NumberStyles.Any, nfi).Dump(); // this works well
var result2 = Convert.ChangeType("$123456", typeof(decimal), nfi); // this doesn't work

我需要Convert.ChangeType()接受货币,可以吗?尝试设置NumberFormatInfo,但看起来它忽略了货币值。

最佳答案

Convert是静态类,而且ChangeType()是静态方法,因此您不能覆盖它们。

即使这不是您所要求的,您也可以创建自己的类,以更改其对十进制(和其他任何十进制)的工作方式,并将Convert.ChangeType()用作其他类型的默认值:

public static class MyConvert
{
     public static object? ChangeType(object? value, Type conversionType, IFormatProvider provider)
     {
         if (conversionType == typeof(decimal))
             return decimal.Parse(value.ToString(), NumberStyles.Any, provider);
         else
             return Convert.ChangeType(value, conversionType, provider);
     }
}

现在,以下代码将按您期望的方式工作:
var result2 = MyConvert.ChangeType("$123456", typeof(decimal), nfi);

关于c# - 是否可以使Convert.ChangeType()接受货币?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/59359392/

10-12 18:14