【发布时间】:2021-05-19 13:13:38
【问题描述】:
我正在尝试编写一个 C# 通用方法,该方法接受 nullable 十进制和双精度值并将它们转换为字符串表示形式。
虽然我正在访问可空参数的 .Value,但我收到错误“方法 'ToString' 没有重载需要 1 个参数”。
这是我的代码。我做错了什么?
public static string ToThousandSeparated<T>(T? value, string naString = "") where T : struct
{
if (value.HasValue)
{
T val = value.Value;
return val.ToString("N0");
}
return naString;
}
【问题讨论】:
-
在您的代码中,
T是一个ValueType,它只有一个ToString重载,不带任何参数。 docs.microsoft.com/en-us/dotnet/api/… -
这里的问题是
T不一定是struct,它的ToString(string format)定义像int或dobule那样。也许传入一个Func<T, string>,这样您就可以指定如何格式化该值。或者,如果您只需要decimal?和double?使用它,则为每个编写两个单独的方法。 -
只写两个方法。如果不添加任何方法,则使此方法通用并不能解决任何问题。
标签: c# tostring generic-method