c# - 是否可以使 Convert.ChangeType() 接受货币?

标签 c# .net

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/

相关文章:

c# - 如何在 VSPackage 中获取 IVsExpansionClient 的实例?

c# - 将焦点设置到 Xamarin Forms 中的下一个条目

c# - 如何在静态方法中获取当前类的名称?

C# TCP 监听器

c# - 如何在 C# 中对二进制 MIME 附件进行编码?

.net - 设计题-离线网络应用

c# - XStreamingElement 作为 XDocument 的一部分

c# - 下拉菜单不工作 MVC C# Razor

c# - 设计方法

c# - WPF TextBlock.IsHitTestVisible 似乎不起作用